java8 stream filter 简单使用
如下代码:
public static void main(String[] args) {
// 存储0-9的列表
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
list.add(i);
}
System.out.println("原列表:");
System.out.println(list);
// 筛选列表中的偶数
list = list.stream().filter(a -> a % 2 == 0).collect(Collectors.toList());
System.out.println("列表中的偶数:");
System.out.println(list);
}
输出结果为:
原列表:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
列表中的偶数:
[0, 2, 4, 6, 8]
简要说明
filter的使用方式为: filter(item -> item的逻辑判断 ) ,其中filter会保留判断条件为true的记录
filter对List多条件筛选
List<user> filter= users.stream()
.filter(user -> user.getName().indexOf("月") > -1 || user.getEmail().indexOf("mu") > -1)
.collect(Collectors.toList());
collect.stream().forEach(user -> {
System.out.println(user.getName()+"======"+user.getEmail());
});
多个年龄匹配代码
List<Integer> ages=new ArrayList<>();
ages.add(20);
ages.add(30);
List<user> filterAges = users.stream().filter(user->ages.contains(user.getAge())).collect(Collectors.toList());
filterAges.stream().forEach(user -> {
System.out.println(user.getName()+"======"+user.getEmail());
});
//多条件筛选,orElse中表示,若没有找到符合筛选条件的则返回这个对象
FilterJava result2 = ls.stream().filter(p->"wq1".equals(p.getName()) && 18==p.getAge()).
findAny().orElse(new FilterJava("doudi",200));
System.out.println(result2.getName());
//使用map收集
String name = ls.stream().filter(p->"wq".equals(p.getName())).map(FilterJava::getName)
.findAny().orElse("");