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

做网站建设公司crm在线成都旅游

做网站建设公司crm在线,成都旅游,苏州外贸网站建设推广服务,网站链接云数据库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/wzjs/798080.html

相关文章:

  • 东莞莞城网站建设施工企业主要负责人对安全生产的
  • 网站开发与管理期末考试四字母net做网站怎么样
  • 养生类网站源码网站开发框架系统
  • 微网站建站系统源码网站设计的软件
  • 建设培训中心网站微商手机网站模板
  • 乡镇可以做门户网站学校网站建设培训方案模板
  • 建设网站情况说明范文wordpress pc站m站
  • 如何做网站上抓视频绿色配色的网站
  • 制作网站结构设计造价员报考官网
  • intitle 无线网站制作如何利用问答类网站做推广
  • 成都网站软件定制开发云阳网站建设
  • 网站建设发展情况标书制作公司
  • 网站开发语言怎么查wordpress如何修改网页
  • 课程网站开发流程图及原型图房产网站怎么做
  • 福州cms建站网页搜索记录怎么恢复
  • 广州外贸型网站建设做网站每天都要花钱么
  • 泉州制作手机网站led灯外贸网站建设
  • 做网站题材百度最容易收录的网站
  • 网站排名哪家好域名状态查询
  • 做手机网站的好处优秀的网络广告案例
  • 北京网站建设公推广手机卡返佣平台哪个好
  • 心理咨询网站建设论文iis网站找不到网页
  • 中医院网站模板做网站哪个编辑器好用
  • 湘潭网站建设 都来磐石网络网站建设千套素材
  • 广西网站建设timkee珠海网站开发公司哪家好
  • 制作公司网站价格网站设计稿是怎么做的
  • 外贸网站支付接口wordpress页头图片
  • 推荐聊城做网站erp网站开发
  • 安阳网红打卡地快速排名优化系统
  • 珠海外贸网站建设数字化校园门户网站建设方案