2017-05-04 131 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的工厂。