当前位置: 首页 > news >正文

无锡万度网站建设WordPress Demo演示

无锡万度网站建设,WordPress Demo演示,网站建设收获与不足,福州网站建设q.479185700強Java中用Stream流取出分组后每组中最大值对应的对象 要从分组后的结果中实际取出这些对象&#xff08;而不是Optional包装的对象&#xff09;&#xff0c;有几种常用的方法&#xff1a; 方法1&#xff1a;直接处理Map中的Optional Map<String, Optional<Order>>…

Java中用Stream流取出分组后每组中最大值对应的对象

要从分组后的结果中实际取出这些对象(而不是Optional包装的对象),有几种常用的方法:

方法1:直接处理Map中的Optional

Map<String, Optional<Order>> groupedResult = orders.stream().collect(Collectors.groupingBy(Order::getCustomerId,Collectors.maxBy(Comparator.comparing(Order::getOrderDate))));// 取出所有对象
List<Order> resultObjects = groupedResult.values().stream().filter(Optional::isPresent).map(Optional::get).collect(Collectors.toList());

方法2:使用collectingAndThen去除Optional

Map<String, Order> resultMap = orders.stream().collect(Collectors.groupingBy(Order::getCustomerId,Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparing(Order::getOrderDate)),opt -> opt.orElse(null))));// 取出所有非null对象
List<Order> resultObjects = resultMap.values().stream().filter(Objects::nonNull).collect(Collectors.toList());

方法3:直接收集到List(Java 12+)

List<Order> resultObjects = orders.stream().collect(Collectors.groupingBy(Order::getCustomerId,Collectors.maxBy(Comparator.comparing(Order::getOrderDate)))).values().stream().flatMap(opt -> opt.map(Stream::of).orElseGet(Stream::empty)).collect(Collectors.toList());

方法4:自定义收集器(更高效)

List<Order> resultObjects = orders.stream().collect(Collectors.collectingAndThen(Collectors.groupingBy(Order::getCustomerId,Collectors.maxBy(Comparator.comparing(Order::getOrderDate))),map -> map.values().stream().filter(Optional::isPresent).map(Optional::get).collect(Collectors.toList())));

完整工作示例

List<Order> orders = Arrays.asList(new Order("C1", LocalDate.of(2023, 1, 10), 100.0),new Order("C1", LocalDate.of(2023, 2, 15), 150.0),new Order("C2", LocalDate.of(2023, 1, 5), 200.0),new Order("C2", LocalDate.of(2023, 3, 20), 250.0),new Order("C3", LocalDate.of(2023, 2, 1), 300.0)
);// 找出每个客户最近的订单并收集到List
List<Order> latestOrders = orders.stream().collect(Collectors.groupingBy(Order::getCustomerId,Collectors.maxBy(Comparator.comparing(Order::getOrderDate)))).values().stream().filter(Optional::isPresent).map(Optional::get).collect(Collectors.toList());// 打印结果
latestOrders.forEach(order -> System.out.println("客户 " + order.getCustomerId() + " 最近的订单日期: " + order.getOrderDate() + " 金额: " + order.getAmount()
));

输出结果示例

客户 C1 最近的订单日期: 2023-02-15 金额: 150.0
客户 C2 最近的订单日期: 2023-03-20 金额: 250.0
客户 C3 最近的订单日期: 2023-02-01 金额: 300.0

关键点总结

  1. groupingBy + maxBy 会产生 Map<K, Optional<T>> 结构
  2. 需要额外处理Optional才能得到实际对象
  3. 推荐使用方法2或方法4,它们在性能和可读性上表现较好
  4. 如果确定每组都有值,可以使用orElseThrow()替代orElse(null)
http://www.dtcms.com/a/507866.html

相关文章:

  • 智能外呼是什么意思
  • 【读论文】——基于光谱学的玉米种子品质检测及其成像技术综述
  • 如何自建网站满分作文网
  • 服务器/Pytorch——对于只调用一次的函数初始化,放在for训练外面和里面的差异
  • iOS 混淆与 IPA 加固一页式行动手册(多工具组合实战 源码成品运维闭环)
  • PySide6 使用搜索引擎搜索 多类实现 更新1次
  • 宁波网站优化的关键企业网站后台管理系统模板
  • 网站开发项目需求分析说明书电子商务网站开发与实现
  • 群晖实现证书90天自动更新(无需对外提供80端口)
  • AMCL自适应(KLD - Sampling: Adaptive Particle Filters)一种基于粒子滤波的移动机器人定位算法
  • NOR FLASH
  • 网站代码优化方案网站建设和编程的区别
  • 重庆建设工程造价管理协会网站直播网站开发价格
  • 【Nest】集成测试
  • ELK运维之路(Logstash基础使用-7.17.24)
  • 快速排序(JAVA详细讲解快速排序的四种方式)
  • 数据结构四大简单排序算法详解:直接插入排序、选择排序、基数排序和冒泡排序
  • 官渡网站建设wordpress单页面制作
  • 企业电子商务网站开发数据库设计昆明seo博客
  • 东道 网站建设erp系统哪家做得好
  • 现代 Web 开发中检测用户离开页面的完整方案(附 Vue 实现)
  • [crackme]029-figugegl.1
  • 网站建站分辨率腾讯企点怎么注册
  • 第四章:L2CAP 的“数据语言”——揭秘蓝牙通信的报文格式
  • 【代码随想录算法训练营——Day43(Day42周日休息)】动态规划——300.最长递增子序列、674.最长连续递增序列、718.最长重复子数组
  • block的样式有哪些?如果copy的话分别会有啥样式
  • 如何做网络投票网站大数据开发工程师
  • 提示词 prompt 快速上手
  • 网站降权查询工具lnmp中安装wordpress
  • 一个空间放两个网站蓟门桥网站建设