【问题标题】:Java 8 Stream sort map of string to list<String> based on list<String> [duplicate]基于list<String>的Java 8 Stream排序映射到list<String> [重复]
【发布时间】:2020-02-06 21:27:37
【问题描述】:

我有一个地图,其中键为字符串,值为字符串列表

我想根据字符串列表(按字典顺序)对地图进行排序。

如果我有List&lt;List&lt;String&gt;&gt;,那么我可以排序

List<List<String>> sortedlist = new LinkedList<>();
sortedlist.sort((l1, l2) -> l1.get(0).compareTo(l2.get(0)));

但我有一个Map&lt;String, List&lt;String&gt;&gt; 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 流来做到这一点?

【问题讨论】:

  • HashMap>

标签: java sorting java-8 hashmap java-stream


【解决方案1】:

试试这个:

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 时,排序没有任何意义,因为它是无序的。

【讨论】:

  • 这行得通。谢谢。现在尝试使用 foreach 直接收集和打印
  • @DeepakSelvakumar 很高兴它有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-08
  • 2015-02-14
  • 1970-01-01
相关资源
最近更新 更多