java8 Stream流使用进阶【TBC】

背景

java8的Stream类,在最初java8出来的时候,就学习了一遍,然后随着时间的推移,全忘了,全忘了。。。。。。所以打算捡起来,把平时经常用到的做个记录。

Stream

过滤

List<UserInfo> userInfoListAfter = userInfoList.stream()
		.filter(userInfo -> StringUtils.isNotBlank(userInfo.getName()))
		.collect(Collectors.toList());

只获取某个字段的值

List<String> dealerCodes = userInfo.getPositionList().stream()
		.filter(position -> StringUtils.isNotBlank(position.getDealerCode()))
		.map(Position::getDealerCode)
		.collect(Collectors.toList());

将List转换为Map

// value 为某个字段值
Map<String, String> SaleCustomerTypeDTMap = saleCustomerList.stream()
.collect(Collectors.toMap(SaleCustomerTypeDTO::getTypeCode, SaleCustomerTypeDTO::getName, (v1, v2) -> v2));

// value 为对象
Map<String, SaleCustomerTypeDTO> SaleCustomerTypeDTMap = saleCustomerList.stream()
.collect(Collectors.toMap(SaleCustomerTypeDTO::getTypeCode, v -> v, (v1, v2) -> v2));

将List分组

Map<Long, List<DmsContractFieldValueDO>> fieldValueGroupMap = contractFieldValueDOList.stream()
.collect(Collectors.groupingBy(DmsContractFieldValueDO::getContractId));

计算List中每个元素出现的次数

// key name, value 出现次数
Map<String, Long> nameCountMap = nameList.stream()
.collect(Collectors.groupingBy(name -> name, Collectors.counting()));

将List排序

List<DmsApplyDO> sortedById = dmsApplyDOS.stream()
.sorted(Comparator.comparing(DmsApplyDO::getId))
.collect(Collectors.toList());

分组求和

// 计算每个月份的合计, key-年月, value-月度合计
Map<Integer, BigDecimal> monthValueMap = monthValueDTOList.stream()
        .collect(Collectors.groupingBy(MonthValueDTO::getYearMonth))
        .entrySet().stream()
        .collect(Collectors.toMap(Map.Entry::getKey,
                entry -> entry.getValue().stream()
                        .filter(monthValueDTO -> Objects.nonNull(monthValueDTO.getValue()))
                        .map(MonthValueDTO::getValue)
                        .reduce(BigDecimal.ZERO, BigDecimal::add)
                )
        );

 

 

借鉴

如何计算List中元素的出现次数

使用java8的Stream,根据Object某些属性对List进行筛选。

Streams filter 例子

Java8 Collectors.toMap的坑

java8之list集合中取出某一属性的方法

Java8新特性——StreamAPI(一)

java8 Stream API中Collectors中toMap方法的问题以及解决

Java 8 并行流介绍

Java 8 Stream 对实体类中的 BigDecimal 分组求和

Java8 stream根据字段分组并排序

Java8 stream sorted排序时包括null

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值