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

2 篇文章 0 订阅

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

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())));
});
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
JavaStream流的常用方法包括获取Stream流、方法和终结方法。 获取Stream流的方法有两种:集合获取Stream流和数组获取Stream流。集合获取Stream流可以使用集合类的stream()方法,例如Map的keySet()方法可以获取键流,values()方法可以获取值流,entrySet()方法可以获取键值对流。数组获取Stream流可以使用Arrays类的stream()方法,将数组转换为Stream流。 方法是对Stream进行操作方法,一次操作完毕之后,还可以继续进行其他操作常用方法包括filter()、map()、flatMap()、distinct()、sorted()、limit()和skip()等。filter()方法用于过滤元素,map()方法用于对元素进行映射,flatMap()方法用于扁平化处理,distinct()方法用于去重,sorted()方法用于排序,limit()方法用于限制元素数量,skip()方法用于跳过元素。 终结方法Stream流的最后一个操作,一个Stream流只能有一个终结方法常用的终结方法包括forEach()、collect()、count()、min()、max()、reduce()和toArray()等。forEach()方法用于遍历元素,collect()方法用于将元素收集到集合,count()方法用于统计元素数量,min()方法用于获取最小值,max()方法用于获取最大值,reduce()方法用于对元素进行归约操作,toArray()方法用于将元素转换为数组。 综合应用Stream流的常用方法可以实现对数据的筛选、转换、排序、统计等操作,提高代码的简洁性和可读性。 #### 引用[.reference_title] - *1* *2* *3* [Java 基础进阶篇(十二):Stream常用方法总结](https://blog.csdn.net/weixin_43819566/article/details/130537949)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值