【不解释原理,纯干货】Java8 Stream日常用法合集

【1】取List<User>对象中的某一个属性

例:比如要取出User对象中的userName作为一个新的List

List<String> collect = userList.stream().map(User::getUserName).collect(Collectors.toList());

【2】取List<User>对象中的某一个属性或对象(过滤条件 - 只取出姓名叫做Jamie的内容),如果要取某个属性,加上map方法即可,如上一条

List<User> collect = userList.stream().filter(x -> x.getUserName().equals("Jamie")).collect(Collectors.toList());

【3】取List<User>信息,以id为key,自身对象为value(或某个值为value),返回map类型

// 取对象
Map<Long, User> collect = userList.stream().collect(Collectors.toMap(User::getId, Functions.identity()));
// 取某个值
Map<Long, String> collect = userList.stream().collect(Collectors.toMap(User::getId, User::getUserName));

如果List的key可能存在重复值,需要用第三个参数处理,不然会报错,这里是取的后一个对象,如果有特殊处理,可以自行写逻辑进行return

Map<Long, User> collect = userList.stream().collect(Collectors.toMap(User::getId, Functions.identity(),(v1,v2)->{return v2;}));

 【4】stream的循环

userList.stream().forEach(x -> {
			x.setName("Jamie");
		});

【5】进行类似group by的操作,比如id相同,对应一个列表,返回Map<Long,List<User>>类似的内容

Map<Long, List<User>> collect = userList.stream().collect(Collectors.groupingBy(User::getId));

进阶一下,将User中的分数进行相加,返回Map<Long,Long>类型(不支持bigDecimal类型)

Map<Long, Long> collect = userList.stream().collect(Collectors.groupingBy(User::getId,Collectors.summingLong(User::getScore)));

进阶一下,如果不求和,我需要count一下实体的数量

Map<Long, Long> collect = userList.stream().collect(Collectors.groupingBy(User::getId,Collectors.counting()));

【6】取list中某个条件的,然后计算他的分数合计(有mapToInt、mapToLong,mapToDource,自行变通,可以配合filter使用)

int sum = data.stream().mapToInt(User::getScore).sum();
int sum2 = data.stream().filter(x->{return x.getId == 100;}).mapToInt(PurchaseReceiveOrderDTO::getReceiveMethod).sum();

求BigDecimal的和

// getNumber返回的是BigDecimal的类型
BigDecimal bigDecimal = data.stream().map(User::getNumber).reduce((a,b) ->a.add(b)).get();

【7】排序

// 从小到大
List<Integer> collect = list.stream().sorted().collect(Collectors.toList());
// 从大到小
List<Integer> collect = list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());

对于对象来说

// 从小到大
List<User> list = userList.sort(Comparator.comparing(user -> user.getId()));
List<User> collect = userList.stream().sorted(Comparator.comparing(User::getId)).collect(Collectors.toList());
// 从大到小
List<User> collect = userList.stream().sorted(Comparator.comparing(User::getId).reversed()).collect(Collectors.toList());

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值