gpt4 book ai didi

java - 如何使用 java 8 lambda 和流对 Map> 进行排序

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:06:50 27 4
gpt4 key购买 nike

我有一个这样的排序日期列表:

2016-07-07
2016-07-08
2016-07-09
2016-07-10
2016-07-11
2016-07-12
2016-07-13
...
2016-07-31
2016-08-01
2016-08-02
2016-08-03
...
2017-01-01
2017-01-02
2017-01-03
...

我从这个列表中生成一个 Map<YearMonth, List<LocalDate>>与流:

Map<YearMonth, List<LocalDate>> d = dates.stream().collect(Collectors.toList())
.stream().collect(Collectors.groupingBy(date -> YearMonth.from(date)));

该 map 的输出如下所示:

{2016-12=[2016-12-01, 2016-12-02,...2016-12-31], 2016-11=[2016-11-01, 2016-11-02,...]}

但我需要的输出应该是这样的:

  • 按日期升序排序的 map 键:{2016-07=[...], 2016-08=[...]}
  • map (列表)的值按日期升序排序:{2016-07=[2016-07-01, 2016-07-02, ...], 2016-08=[2016-08-01, 2016-08-02, ...]}

我尝试了很多选项来获得我预期的结果,但我只是得到了键或值的正确排序,而不是两者:

Map<YearMonth, List<LocalDate>> m = stream().collect(Collectors.toList())
.stream().sorted((e1,e2) -> e2.compareTo(e1))
.collect(Collectors.groupingBy(date -> YearMonth.from(date)));

结果:

{2016-07=[2016-07-31, 2016-07-30, ...], 2016-08=[2016-08-31, 2016-08-30, ...]}

如何同时按键和值排序?

最佳答案

使用 TreeMap 作为收集器,以便输出按键排序。

像这样:

 dates.stream()
.sorted()
.collect(
Collectors.groupingBy(YearMonth::from, TreeMap::new, Collectors.toList())
);

关于java - 如何使用 java 8 lambda 和流对 Map<YearMonth, List<LocalDate>> 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38239027/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com