java - Java 8 Stream 将字符串排序映射到列表基于列表
问题描述
我有一个键作为字符串,值作为字符串列表的地图
我想根据字符串列表(按字典顺序)对地图进行排序。
如果我有,List<List<String>>
那么我可以按
List<List<String>> sortedlist = new LinkedList<>();
sortedlist.sort((l1, l2) -> l1.get(0).compareTo(l2.get(0)));
但是我有一个Map<String, List<String>>
sortedMap,我想根据值对其进行排序,即地图值集中每个列表的第一个元素。
我正在尝试形成一个类似这样的流 lambda 表达式。
HashMap<String, List<String> > sortedmap = new HashMap<>();
sortedmap = map.values().stream().sorted(Map.Entry.comparingByValue((l1, l2) -> l1.get(0).compareTo(l2.get(0))) )
但它不是一个有效的 lambda 表达式。
我如何使用 Java 8 流来做到这一点?
解决方案
尝试这个:
Map<String, List<String>> sortedMap =
map.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue(Comparator.comparing(l -> l.get(0))))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (v1, v2) -> v1, LinkedHashMap::new));
请注意,在收集到 a 时排序没有任何意义HashMap
,因为它是无序的。
推荐阅读
- python - 将 Python DataFrame 转换为字典列表
- python - Python将十六进制字符串更改为十六进制整数
- python - Python - 遍历列表以计算元音并将数字放入字典中
- javascript - Rocket.Chat 自定义 JavaScript 拦截新消息
- python - SQL Alchemy - 在一对多关系中避免递归
- windows - 将后期效果/像素着色器应用于 Windows
- node.js - Heroku 在向另一个 Heroku 应用程序发出 HTTP 请求后使用 SIGTERM 停止所有进程
- python - django中迁移不起作用怎么办?
- intel - 如何将英特尔 PCM 数据缩小到单个进程?
- javascript - FOUC - 如果渲染需要 DOM 和 CSSOM,为什么会发生这种情况?