这里写自定义目录标题
背景
在项目开发中,经常遇到筛选list中是否包含某个子字符串,有多种方式,本篇主要介绍stream流的filter和anyMatch两种方案,记录下来,方便备查。
初始化
处理话bean
@Data
public class OrderInfo implements Serializable {
/**
* 订单号
*/
private String orderNo;
/**
* 订单数量
*/
private int orderNum;
/**
* 订单金额-分
*/
private Long orderAmountL;
/**
* 支付方式:ALIPAY-支付宝,WECHATPAY-微信支付
*/
private String payType;
}
构造list
public static void main(String[] args) {
List<OrderInfo> orderInfoList = new ArrayList<>();
OrderInfo orderInfo = new OrderInfo();
orderInfo.setPayType("ALIPAY");
orderInfoList.add(orderInfo);;
}
方法一、filter过滤
使用stream流的filter方法,
public static void main(String[] args) {
List<OrderInfo> orderInfoList = new ArrayList<>();
OrderInfo orderInfo = new OrderInfo();
orderInfo.setPayType("ALIPAY");
orderInfoList.add(orderInfo);
boolean filterFlag = StreamFilterList(orderInfoList);
System.out.println("StreamFiler遍历结果为:"+ filterFlag );
}
private static boolean StreamFilterList(List<OrderInfo> orderInfoList){
boolean filterFlag = orderInfoList.stream().filter(order->order.getPayType().equals("ALIPAY")).findAny().isPresent();
System.out.println("StreamFilterList遍历结果为:"+ filterFlag );
return filterFlag;
}
执行结果如下所示。
方法二、anyMatch匹配
Stream流的anyMatch过滤方法,只要在list中找到满足条件的字符串即返回成功。
allMatch 过滤方法,顾名思义,list中所有记录均能找到满足条件的字符串才返回成功。
public static void main(String[] args) {
List<OrderInfo> orderInfoList = new ArrayList<>();
OrderInfo orderInfo = new OrderInfo();
orderInfo.setPayType("ALIPAY");
orderInfoList.add(orderInfo);
boolean filterFlag = StreamAnyMatchList(orderInfoList);
System.out.println("StreamFiler遍历结果为:"+ filterFlag );
}
private static boolean StreamAnyMatchList(List<OrderInfo> orderInfoList){
boolean anyMatchFlag = orderInfoList.stream()
.anyMatch(order->order.getPayType().equals("ALIPAY"));
System.out.println("StreamAnyMatch遍历结果为:"+ anyMatchFlag );
return anyMatchFlag;
}
执行结果如下所示。