如何使用java 8 lambda和streams对Map>进行排序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何使用java 8 lambda和streams对Map>进行排序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1243字,纯文字阅读大概需要2分钟。
内容图文
![如何使用java 8 lambda和streams对Map>进行排序](/upload/InfoBanner/zyjiaocheng/727/89edca2c3e7940459df04233226d17ea.jpg)
我有一个这样的排序日期列表:
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)));
该映射的输出如下所示:
{2016-12=[2016-12-01, 2016-12-02,...2016-12-31], 2016-11=[2016-11-01, 2016-11-02,...]}
但我需要的输出应该是这样的:
>按日期升序排序的地图键:{2016-07 = […],2016-08 = […]}
>地图(列表)按日期升序排序:{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 8 lambda和streams对Map>进行排序全部内容,希望文章能够帮你解决如何使用java 8 lambda和streams对Map>进行排序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。