2017-05-04 73 views
-1

我無法理解,也沒有找到合適的示例Collectors.toMap方法與Supplied參數; this oneCollectors.toMap與供應商參數

我完全理解其他人,用函數來創建鍵,值,二進制的東西來處理重複,我只是不明白最後一個方法,有一個額外的供應商參數。

+1

額外的供應商可以讓您確定要返回的Map的實現(例如,您可以傳遞HashMap :: new或LinkedHashMap :: new)。 – Eran

+0

作爲文檔顯示它與'Collectors.toCollection(TreeSet :: new)'集合' – AxelH

+1

第二個回答[此問題](http://stackoverflow.com/questions/33724733/confused-by-java8-收藏家tomap)有一個很好的解釋示例 –

回答

0

你提到的方法讓你來決定兩個:

  • 具體的Map實現(例如的HashMapConcurrentHasMap,等..)
  • 具體,落實的情況下(您可以傳遞新創建的實例或在應用程序堆中創建的某個實例)

與此方法相反,在其他2個重載版本中,映射的實現將由庫選擇並創建一個新的實例。

+0

有道理。謝謝。最後一件事。這意味着什麼,如果沒有供應商的論點,實施將被「圖書館」選擇? – tisek

2

下面是一個例子:

Arrays.asList(1, 2, 3).stream() 
     .collect(Collectors.toMap(i -> i, i -> i, (i, j) -> i, HashMap::new)); 

在這個例子中是Supplier<M> mapSupplierHashMap::new,能夠創建一個空Map的工廠。