You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 8 Stream对映射后的LocalDate流排序不生效如何解决

问题原因

你的排序操作放在了flatMap的内部子流中,仅实现了每个客户单独的订单列表内部排序,所有客户的订单合并为全局流之后没有做统一排序。
举个例子:如果客户1的订单排序后是2019-02-17、2019-12-05、2020-03-15,客户2的订单排序后是2018-10-05、2020-07-15、2021-01-01,程序会先输出客户1的全部排好序的订单,再输出客户2的全部排好序的订单,最终结果自然没有全局升序效果。

修复方案

将排序操作移动到flatMap之后,对合并完成的全部日期做全局排序即可。LocalDate本身已实现Comparable接口,直接调用无参sorted()方法即可实现默认升序,无需额外自定义比较器:

clients.stream()
        .filter(client -> client.getOrders() != null)
        .flatMap(client -> client.getOrders().stream())
        .map(Order::getDate)
        .sorted()
        .forEach(System.out::println);

如果你需要显式声明排序规则保持代码可读性,也可以选择两种等效写法:

  • 保留LocalDate::compareTo的写法,放在map提取日期之后即可
  • 若使用Comparator.comparing(Order::getDate)写法,需要将sorted放在map提取日期之前,否则流中元素类型已变为LocalDate,无法调用Order类的getDate方法

内容的提问来源于stack exchange,提问作者Kiji_T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:09:03