【问题标题】:Sort by LocalDate a mapped stream按 LocalDate 排序映射流
【发布时间】:2021-12-07 04:10:26
【问题描述】:

我有一个类 client,其中包含 Orders 列表,其中还包含 LocalDate order_date

使用 Java 8 流,我想按日期对订单列表进行排序。

我有以下代码:

clients.getOrders().stream().map(Order::getDate).sorted(LocalDate::compareTo)).forEach(System.out::println)

但这绝对不会排序。我也试过sorted(Comparator.comparing(Order::getDate)),但打印出来的结果是一样的。

编辑

日期不同,我的整个代码行是这样的

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

我的输出是

2019-02-17
2019-12-05
2020-03-15
2018-10-05
2020-07-15
2021-01-01

Process finished with exit code 0

我想要这个

2018-10-05
2019-02-17
2019-12-05
2020-03-15
2020-07-15
2021-01-01

【问题讨论】:

  • 我无法重现此问题。一些示例输入和输出会很好,以及您正在使用的 Java 版本。

标签: java sorting java-stream localdate


【解决方案1】:

更新 似乎问题中的实现多次调用 client.getOrders() 。 不确定client.getOrders() 是否每次调用都返回相同的结果。它也只排序日期,而不是订单。

以下代码仅进行一次client.getOrders() 调用并对订单进行排序。

final List<Order> orders = clients.stream().map(clients -> client.getOrders())
.filter(Objects::nonNull)
.flatMap(orders -> orders.stream()) 
.sorted(Comparator.comparing(Order::getDate))
.collect(Collectors.toList());
//Printing orders' dates
orders.stream().map(Order::getDate).forEach(System.out::println);

基于第一个问题版本的信息

根据可用的原始信息,这应该正常工作:

clients.getOrders().stream()
.sorted(Comparator.comparing(Order::getDate)) 
.forEach(System.out::println)

但你已经提到你试过了。

另一种方法是使用集合。

final List<Order> orders=clients.getOrders();
Collections.sort(orders,Comparator.comparing(Order::getDate));
orders.stream().forEach(System.out::println);

【讨论】:

  • 我编辑了我的帖子
【解决方案2】:

我认为您排序错误的流。如果您先使用flatMap,然后使用sorted,它应该可以工作。

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

【讨论】:

  • 完美运行。我正在学习流,我认为我必须映射命令的日期,但确实没有意义。谢谢朋友
猜你喜欢
  • 2019-04-29
  • 2015-08-06
  • 2021-02-06
  • 2017-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多