2017-07-07 94 views
1

這裏是我的功能:計數和列表出現內部列表排序數由DESC

public static void countKeywords(List<String> list) { 
    Map<String, Long> counts = 
      list.stream().collect(Collectors.groupingBy(e -> e, Collectors.counting())); 
    System.out.println(counts); 
} 

這裏是樣品,它輸出:

{alarm=2, player=1, factory=3} 

我需要它的發生次數進行排序在下降的方向。所以輸出必須是這樣的:

factory - 3 
    alarm - 2 
    player - 1 

我在做什麼錯?

+0

你嘗試使用Collections.sort? – ZeldaZach

+0

@ZeldaZach究竟在哪裏? – att13

+0

我覺得這是某種家庭作業問題,所以我會讓你把那個部分弄出來:) – ZeldaZach

回答

1

問題是你使用的數據結構。法線貼圖不能保證訂單或排序。如果你使用Map作爲你的結構,我會看看TreeMap API。它可以讓你在你的地圖構造器中定義一個比較器。

https://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html

public static void countKeywords(List<String> list) { 
    Map<String, Long> counts = list.stream().collect(Collectors.groupingBy(e -> e, Collectors.counting())); 
    System.out.println(counts); 

    TreeMap<String, Long> sortedMap = new TreeMap<String, Long>(new Comparator<String>() { 
     @Override 
     public int compare(String key1, String key2) { 
      return counts.get(key2).compareTo(counts.get(key1)); 
     } 
    }); 

    sortedMap.putAll(counts); 
    System.out.println(sortedMap); 
} 
+0

你會如何更改我的代碼? – att13

+0

@ att13我加了 – Steve

+0

以上的代碼讓人驚歎。它的表現怎麼樣? – att13