Java8 Stream对集合的一些应用
时间:2021-07-22
本文章向大家介绍Java8 Stream对集合的一些应用,主要包括Java8 Stream对集合的一些应用使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
工作中一段时间对数据统计操作比较多,总结了部分常用到的Stream流操作。
1. 过滤并判空
//String fundCode,List<GuaranteeSystemBIDataDetailStatistic> totalSealedStatistics
Optional<GuaranteeSystemBIDataDetailStatistic> totalSealedStatistic = totalSealedStatistics.stream().filter(statistic -> statistic.getFundCode().equals(fundCode)).findFirst();
if(totalSealedStatistic.isPresent()){
onLoanDataDetail.setTotalSealedNum(totalSealedStatistic.get().getTotalSealedNum());
}
2. 求和(Stream复用)
//List<AfterLoanDataDetail> afterLoanDataDetailList
Supplier<Stream<AfterLoanDataDetail>> afterLoanDataDetailStream = () -> afterLoanDataDetailList.stream().filter(afterLoanDataDetail -> !FundCode.ZGC_BK.getCode().equals(afterLoanDataDetail.getFundCode()));
Integer totalCompensatedNumSum = afterLoanDataDetailStream.get().collect(Collectors.summingInt(AfterLoanDataDetail::getTotalCompensatedNum));
BigDecimal compensatedBalance = checkData(afterLoanDataDetailStream.get().map(AfterLoanDataDetail::getCompensatedBalance).reduce(BigDecimal.ZERO,BigDecimal::add));
3. 遍历
//List<AfterLoanDataDetailFormat> afterLoanDataDetailFormats
afterLoanDataDetailFormats.forEach( detailFormat -> {
if(!(ALL_FUND_CODE_CHARGE_GUARANTEE_AMOUNT.contains(detailFormat.getFundCode()))){
detailFormat.setWjGuaranteeAmount("-");
detailFormat.setYzGuaranteeAmount("-");
}
});
4. 排序
List<RegionalRatio> regionalRatioList = new Gson().fromJson(request.getRatioData(),new TypeToken<List<RegionalRatio>>(){}.getType());
List<RegionalRatio> regionalRatios = regionalRatioList.stream().filter(regionalRatio -> !TOTAL.equals(regionalRatio.getRegionCode())).collect(Collectors.toList());
/* ---codes--- */
case 1://正序
regionalRatios = regionalRatios.stream().sorted(Comparator.comparing(RegionalRatio::getOnLoanBalance)).collect(Collectors.toList());
break;
case 2://倒序
regionalRatios = regionalRatios.stream().sorted(Comparator.comparing(RegionalRatio::getOnLoanBalance).reversed()).collect(Collectors.toList());
break;
5. 集合合并
//List<GuaranteeSystemBIDataDetailStatistic> onLoanBalanceList0,onLoanBalanceList
//以ProvinceCode为id,id相同的进行LoanBanlanceAmount求和,即对onLoanBalanceList0进行去重合并
onLoanBalanceList = onLoanBalanceList0.stream().collect(Collectors.toMap(GuaranteeSystemBIDataDetailStatistic::getProvinceCode,a->a,(o1,o2)->{
o1.setLoanBanlanceAmount(o1.getLoanBanlanceAmount().add(o2.getLoanBanlanceAmount()));
return o1;
})).values().stream().collect(Collectors.toList());
6. 去重
List<String> occupationList = allStatisticList.stream().map(statistic -> statistic.getOccupation()).distinct().collect(Collectors.toList());
原文地址:https://www.cnblogs.com/zjfjava/p/15043844.html
- 扩展mysql - 手把手教你写udf
- scrapy初体验 - 安装遇到的坑及第一个范例
- Linux性能监控 - CPU、Memory、IO、Network
- 浅谈UDP(数据包长度,收包能力,丢包及进程结构选择)
- WCF版的PetShop之三:实现分布式的Membership和上下文传递
- “高并发”问题如何解决?腾讯云一分钟配置的“黑科技”帮您
- 初探JavaScript(三)——JS带我"碰壁"带我飞
- 初探JavaScript(四)——作用域链和声明提前
- 开发人员看测试之运行Github中的JBehave项目
- 如何高效地合并Spark社区PR到自己维护的分支
- 开发人员看测试之TDD和BDD
- AngularJS入门心得1——directive和controller如何通信
- AngularJS入门心得2——何为双向数据绑定
- AngularJS入门心得3——HTML的左右手指令
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 微信小程序结合腾讯地图获取用户所在城市信息
- 设置事务超时时间的问题及Oracle数据库update和锁
- 超赞,压缩20M文件从30秒到1秒的优化过程
- 超赞,给你推荐20个使用 Java CompletableFuture的例子!
- Java入门编程练习题
- Spark UDF加载外部资源
- Flink SQL FileSystem Connector 分区提交与自定义小文件合并策略
- Facebook面试题: 用递归和迭代手写Array.prototype.flat()
- Kubernetes插件之ip-masq-agent
- 抽丝剥茧Kotlin - 协程
- 使用Java8中的Optional类来消除代码中的null检查
- 通俗讲解从Transformer到BERT模型!
- 「R」使用有限混合模型
- Kaggle经典数据分析项目:泰坦尼克号生存预测!
- 零基础学习梯度下降算法