首页 > 解决方案 > 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 流来做到这一点?

标签: javasortingjava-8hashmapjava-stream

解决方案


尝试这个:

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,因为它是无序的。


推荐阅读