当前位置: 首页 > 知识库问答 >
问题:

如何按值对HashMap进行排序,但同时保持重复项的顺序?

督飞羽
2023-03-14
java prettyprint-override">LinkedHashMap<Character, Double> sorted = new LinkedHashMap<>();
tableProbability.entrySet()
        .stream()
        .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
        .forEachOrdered(x -> sorted.put(x.getKey(), x.getValue()));

有没有办法保留重复订单,或者至少当它找到重复订单时,把它放在价值相等的订单后面?

共有1个答案

袁秦迟
2023-03-14

您的代码运行良好,但您可以将其简化如下:

>

  • 源映射:

    LinkedHashMap<Character, Double> tableProbability =
            new LinkedHashMap<>() {{
                put('M', 0.1);
                put('U', 0.3);
                put('L', 0.3);
                put('T', 0.2);
                put('I', 0.1);
            }};
    
    System.out.println(tableProbability);
    // {M=0.1, U=0.3, L=0.3, T=0.2, I=0.1}
    

    此代码运行良好:

    LinkedHashMap<Character, Double> sorted = new LinkedHashMap<>();
    tableProbability.entrySet()
            .stream()
            .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
            .forEachOrdered(x -> sorted.put(x.getKey(), x.getValue()));
    
    System.out.println(sorted);
    // {U=0.3, L=0.3, T=0.2, M=0.1, I=0.1}
    
    LinkedHashMap<Character, Double> sorted2 = tableProbability
            .entrySet().stream()
            .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
            .collect(LinkedHashMap::new,
                    (col, e) -> col.put(e.getKey(), e.getValue()),
                    HashMap::putAll);
    
    System.out.println(sorted2);
    // {U=0.3, L=0.3, T=0.2, M=0.1, I=0.1}
    

  •  类似资料:
    • 考虑下面的哈希图: 具有诸如 我需要按值对hashmap进行降序排序,但如果值相等,则按键进行升序排序: 到目前为止,我试着分别按键排序,然后按值排序,但我不相信这种方法。除了创建更多的hashmaps之外,还有什么好方法呢?

    • 所以我遇到了这个方法,它能够按值对HashMaps进行排序。 我想在比较器上使用方法,但是我似乎找不到合适的地方放它。

    • 我试图排序的hashmap的结构的值从高到低。 我在下面创建了一个函数来对数据进行排序。 我收到以下错误: 异常在线程"main"java.lang.ClassCastException:类java.lang.String不能转换为类java.lang.整数(java.lang.String和java.lang.整数在加载器'bootstrap'的模块java.base) 我相信我的错误是由上面的

    • 如何搜索前面有数字值的排序arraylist,计划是我要用最大到最小的数字对listview进行排序

    • 问题内容: 我需要根据存储在其中的值对我进行排序。在包含存储在手机联系人的名字。 另外,我还要求在对值进行排序时对键进行自动排序,否则你可以说键和值绑定在一起,因此值的任何更改都应反映在键中。 要求的输出: 问题答案: 尝试下面的代码对我来说很好。你可以选择升序和降序 编辑:版本2 使用了新的Java功能,例如流for-each等 如果值相同,则地图将按键排序

    • 边走边学Java(Python背景)。简单的单词计数程序在Java7代码(不能用J8!)。 我有一个单词的哈希图:计数对。现在我需要按计数(递减顺序)排序,并打破按字母顺序使用word的联系。 我正在寻找对这个想法的反馈: 遍历HashMap中的映射项(me) 使用me.getkey=K和me.getvalue=v new map.entry reverse_me=(V,K){不确定此语法} 将r