当前位置: 首页 > 面试题库 >

如何根据地图的值参数对地图进行排序?

夹谷腾
2023-03-14
问题内容

Stream >> sorted = index.entrySet().stream()
.sorted(Map.Entry.comparingByValue());

sorted(Comparator<? super Map.Entry<String,List<NFArticle>>>)类型中的方法Stream<Map.Entry<String,List<NFArticle>>>不适用于参数(Comparator <Map.Entry<Object,Comparable<? super Comparable<? super V>>>>)

我想Hashmap根据size()作为的值的列表对a进行排序HashMap。如何使用Java 8中的Stream库实现此目的?


问题答案:

这可能对您有帮助。

我将结果映射的类型更改为 LinkedHashMap 以遵守插入顺序。

public static void main(String[] args) {
    final Map<String, List<Integer>> map = new HashMap<>();
    map.put("k1", Arrays.asList(new Integer[]{1, 2, 3, 4, 5}));
    map.put("k2", Arrays.asList(new Integer[]{1, 2, 3, 4, 5, 6}));
    map.put("k3", Arrays.asList(new Integer[]{1, 2, 3}));
    System.out.println(getMapSortedByListSize(map));
}

public static <K, V> Map<K, List<V>> getMapSortedByListSize(final Map<K, List<V>> map) {
    return map.entrySet().stream()
            .sorted((e1, e2) -> e1.getValue().size() - e2.getValue().size())
            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (a, b) -> a, LinkedHashMap::new));
}


 类似资料:
  • 问题内容: 我有一个这样的: 我想根据列表值的大小按升序对地图进行排序。我怎样才能做到这一点? 在这种情况下,我希望订购加拿大,印度,美国的钥匙。 问题答案: 没有可保证的迭代顺序,因此您需要收集到一个才能使排序有意义。 之所以引发,是因为合并器功能仅用于并行流],而我们并未使用。 如果您觉得可读性更好,也可以使用:

  • 假设我们有一个叫做活动的班级: 因此,每个活动对象都将有一个项目。。而且每个项目都有一个单元。两个不同的项目可以具有相同的单元: 一个单位也有一个名字: 所以目前我有一个树状图像这样: 一个例子可能是: 等 现在让我们假设projectOne与projectThree具有相同的单元(unitAAA),projectThree具有UNITZZ。。。 我想按项目元素的单位按字母顺序对地图进行排序: 我

  • 如何根据条目列表的值和键对地图进行排序 首先按Value desc排序,然后如果值冲突按Key Desc排序 给定地图中的示例: 预期订单:

  • 有了上面的地图值列表,我需要在一个伸展过程中根据date1和date2进行排序,从而得到下面的输出… 对于上述输入数据,我要求的O/P顺序是:

  • 问题内容: 如何使用树的值而不是键对树图进行排序? 问题答案: 您不能这样做,因为TreeMap的比较器仅针对键运行,例如,参见this 构造函数。 无论如何,您可以使用多个Collections,使用TreeMap(或HashMap)通过键查找元素,并具有SortedSet来迭代值。