JAVA中使用Stream流对List进行操作 -常用方法和坑

2年前 (2022) 程序员胖胖胖虎阿
326 0 0

JAVA中使用Stream流对List进行操作-常用方法和坑

  • Stream常见操作方法

Stream常见操作方法

1. 按照条件查找指定数据, 找到返回一个对象, 找不到返回null

//查找id为6的数据
User user =getUsers().stream().filter(p -> p.getId()==6).findAny().orElse(null);
System.out.println(user != null ? user.toString():

2.按找条件筛选数据, 返回一个List集合

//查找age大于20的List集合
List<User> users =getUsers().stream().filter(p -> p.getAge()>20).collect(Collectors.toList());
System.out.println(users);

PS: 根据数据筛选的时候, 如果age中出现null数据, 就会报空异常, 而由于是Lambda表达式内部, 所以调试不会定位问题在哪里, 基本定位方法, 方法没错, 传入没错, 那就是数据出错了

3、对BigDecimal类型数据进⾏求和

// 统计所有⽤户的总钱数
BigDecimal totalMoney = users.stream().filter(p -> p.getMoney()!= null).map(User::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
System.out.println(totalMoney);

4、按条件统计数量

// 统计⽤户数量
long count =getUsers().stream().filter(p -> p.getName()!= null).count();
System.out.println(count);

5、按条件对数据进⾏求和

// ⽤户的评平均年龄
double totalAge =getUsers().stream().filter(p -> p.getName()!= null).mapToDouble(User::getAge).sum();
System.out.println(Math.ceil(totalAge / count));

6、按条件对数据进⾏分组

// ⽤户按照年龄分组
Map<Integer, List<User>> userMap =getUsers().stream().collect(Collectors.groupingBy(User::getAge));
System.out.println(userMap);

7、List泛型集合按id分组,获取id分组之后最⼩值

List<Fog> result =new ArrayList<>();
fogs.stream().collect(Collectors.groupingBy(Fog::getStationId)).forEach((key, values)->{
    values.stream().min(Comparator.comparing(Fog::getValue)).ifPresent(fog -> result.add(toFog(key, fog.getValue())));
});

8、List泛型集合按id分组,获取id分组之后最⼤值

List<WindExtreme> result =new ArrayList<>();
windExtremes.stream().collect(Collectors.groupingBy(WindExtreme::getStationId)).forEach((key,values)->{
    values.stream().max(Comparator.comparing(WindExtreme::getSpeed)).ifPresent(windExtreme -> result.add(toWindExtreme(key, windExtreme.getSpeed())));
});

相关文章

暂无评论

暂无评论...