【问题标题】:Sort List of Values in a Map in descending order按降序对 Map 中的值列表进行排序
【发布时间】:2021-08-09 21:02:27
【问题描述】:

我有一张包含双打列表的地图。

未排序的地图内容:{A=[0.02, 0.03], B=[0.0, 0.01], C=[0.01, 0.0], D=[0.05, 1.03], E=[1.01, 0.03]}

我需要对 List(0) 进行降序排序。我尝试了以下逻辑,但它按升序排序。

Map<String, List<Double>> map = new HashMap<>();

map.put("A", new ArrayList<Double>(Arrays.asList(0.02,0.03)));
map.put("B", new ArrayList<Double>(Arrays.asList(0.00,0.01)));
map.put("C", new ArrayList<Double>(Arrays.asList(0.01,0.00)));
map.put("D", new ArrayList<Double>(Arrays.asList(0.05,1.03)));
map.put("E", new ArrayList<Double>(Arrays.asList(1.01,0.03)));
        
        
Map<String, List<Double>> output = map.entrySet()
                .stream()
                .sorted(Comparator.comparing(o -> o.getValue().get(0)))
                .collect(Collectors
                        .toMap(Map.Entry::getKey,Map.Entry::getValue,(a,b) ->a, LinkedHashMap :: new));
        
        
System.out.println("After sort: " + output);

实际输出: {B=[0.0, 0.01], C=[0.01, 0.0], A=[0.02, 0.03], D=[0.05, 1.03], E=[1.01, 0.03]}

预期输出: {E=[1.01, 0.03], D=[0.05, 1.03], A=[0.02, 0.03], C=[0.01, 0.0], B=[0.0, 0.1]}

请帮助我了解 Java8 流的逻辑。

【问题讨论】:

  • 您拥有的ComparatorComparator&lt;Map.Entry&lt;String, List&lt;Double&gt;&gt;&gt; compareFirstValue = Comparator.comparing(o -&gt; o.getValue().get(0));,但您需要的是Comparator&lt;Map.Entry&lt;String, List&lt;Double&gt;&gt;&gt; reversedOrder = compareFirstValue.reversed(); ..... 撇开:Arrays.asList(0.02,0.03) 足以进行初始化。

标签: java sorting collections java-8


【解决方案1】:

试试这个:

Map<String, List<Double>> output = map.entrySet()
            .stream()
            .sorted(Collections.reverseOrder(Comparator.comparing(o -> o.getValue().get(0))))
            .collect(Collectors
                    .toMap(Map.Entry::getKey,Map.Entry::getValue,(a,b) ->a, LinkedHashMap :: new));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 2014-10-29
    • 2022-01-06
    • 1970-01-01
    • 2016-10-18
    相关资源
    最近更新 更多