【问题标题】:Java stream sorted not workingJava 流排序不工作
【发布时间】:2015-07-09 09:31:51
【问题描述】:

我有一个

HashMap<String,Integer> map 

我想按值降序排序 我愿意:

HashMap<String,Integer> topSorted = new HashMap<>();

//sort map in descending order
Stream<HashMap.Entry<String,Integer>> st = map.entrySet().stream();
st.sorted(Comparator.comparing((HashMap.Entry<String,Integer> e) -> e.getValue()).reversed())
        .forEach(e -> topSorted.put(e.getKey(),e.getValue()));

但是 topsorted 仍然和 map 一样,根本没有排序

谁能解释我做错了什么

【问题讨论】:

标签: java sorting java-8 java-stream


【解决方案1】:

试试这个

public class OrderByValue {

        public static void main(String a[]){
            Map<String, Integer> map = new HashMap<String, Integer>();
            map.put("java", 20);
            map.put("C++", 45);
            map.put("Java2Novice", 2);
            map.put("Unix", 67);
            map.put("MAC", 26);
            map.put("Why this kolavari", 93);
            Set<Entry<String, Integer>> set = map.entrySet();
            List<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(set);
            Collections.sort( list, new Comparator<Map.Entry<String, Integer>>()
                    {
                public int compare( Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2 )
                {
                    return (o2.getValue()).compareTo( o1.getValue() );
                }
                    } );
            for(Map.Entry<String, Integer> entry:list){
                System.out.println(entry.getKey()+" ==== "+entry.getValue());
            }
        }
    }    

【讨论】:

    【解决方案2】:

    HashMap 未排序。您无法对其进行排序。

    您可以使用LinkedHashMap,它会为您提供特定的迭代顺序。

    【讨论】:

    • 谢谢,你是对的,我只是忘记了 HashMap 没有排序
    猜你喜欢
    • 2020-12-14
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    相关资源
    最近更新 更多