2017-04-03 51 views
2

現在我有這樣的方法:是否有可能將轉換列表改進爲有序地圖?

public static Map<String, Long> getSortedMap(List<String> wordsList) { 
    Map<String, Long> countedWords = wordsList.stream() 
      .collect(
        Collectors.groupingBy(Function.identity(), Collectors.counting()) 
      ); 
    return new TreeMap<>(countedWords); 
} 

其將字符串列表來圖,其中關鍵是從列表中唯一的字符串,其值 - 的時候,這串在列表中重複次數。然後按鍵排序地圖。

  1. 這可以重寫爲一個流操作嗎?
  2. 是否可以提高執行速度?
+3

這是一個實現細節,但在目前的版本中,'Collectors.summingLong(X - > 1L)'可能是比'Collectors.counting()'快。由於這將在下一個版本中發生變化,因此,如果您有真正的性能問題,那麼您應該只使用這些知識,因爲強烈建議您在下一個Java版本上修改代碼。 – Holger

+0

@Holger不錯!我剛剛檢查了資料來源,並確實在9日對'summingLong'進行了統計。而在8'計數'這是一個減少操作*可能*很多拳擊和取消拳擊。 – Eugene

回答

4

可以使用Collectors.groupingBy變種,需要一個mapFactory作爲參數:

public static Map<String, Long> getSortedMap(List<String> wordsList) { 
    return wordsList.stream() 
      .collect(
        Collectors.groupingBy(Function.identity(), 
              TreeMap::new, 
              Collectors.counting()) 
      ); 
} 
相關問題