Java 8 Stream基于list <String>将字符串映射到list <String>

时间:2019-10-09 13:59:29

标签: java sorting java-8 hashmap java-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流?

1 个答案:

答案 0 :(得分:3)

尝试一下:

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));

请注意,在收集到HashMap时,排序是没有意义的,因为它是无序的。