【问题标题】:How to sort a HashMap<String, Integer[]>? [duplicate]如何对 HashMap<String, Integer[]> 进行排序? [复制]
【发布时间】:2019-08-19 05:21:02
【问题描述】:

我有一个带有字符串和整数数组的 HashMap,我想按数组的第一个值对地图进行排序。

例如,在条目中:

{"Name1"=[2,4],
 "Name2"=[1,5],
 "Name3"=[3]}

顺序应该是:

{"Name2"=[1,5],
 "Name1"=[2,4],
 "Name3"=[3]}

【问题讨论】:

  • 如果数组映射的第一个值与?
  • 从技术上讲,您无法对HashMap 进行排序,但您可以使用另一个Map 类对HashMap 的内容进行排序。

标签: java sorting hashmap


【解决方案1】:

我想按数组的第一个值对地图进行排序

我们可以在从Map.entrySet() 提取的流中使用自定义比较器,该比较器在进行比较时会从 Map 的值中考虑数组的第一个元素

 Map<String, Integer[]> map = new HashMap<>();
 map.put("Name1", new Integer[]{2,5});
 map.put("Name2", new Integer[]{1,4});
 map.put("Name3", new Integer[]{3});


 Map<String, Integer[]> sorted = map
                             .entrySet().stream()
                             .sorted(Comparator.comparing(ent -> ent.getValue()[0]))
                             .collect(Collectors.toMap(Map.Entry::getKey, 
                                                      Map.Entry::getValue,
                                                      (a, b) -> b,                                                        
                                                     LinkedHashMap::new));

 sorted.forEach((k,v) -> System.out.println("{ " + k + " " + Arrays.toString(v) + " }"));

输出:

{ Name2 [1, 4] }
{ Name1 [2, 5] }
{ Name3 [3] }

【讨论】:

    猜你喜欢
    • 2012-08-27
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多