【问题标题】:Collectors.toMap with Supplier argument带有供应商参数的 Collectors.toMap
【发布时间】:2017-05-04 19:35:39
【问题描述】:

我无法理解,也无法找到带有 Supplied 参数的 Collectors.toMap 方法的合适示例; this one.

我完全理解其他方法,具有创建键、值、处理重复项的二进制事物的功能,我只是不明白最后一种方法有一个额外的供应商参数。

【问题讨论】:

  • 额外的供应商让您确定要返回的 Map 的实现(例如,您可以传递 HashMap::new 或 LinkedHashMap::new)。
  • 如文档所示,CollectionCollectors.toCollection(TreeSet::new)
  • this question 的第二个答案有一个很好解释的例子
  • 好指针,@RobinTopper,Tunaki’s answer底部的代码很好(这次我直接链接到答案;使用答案下的分享链接获取直接链接)。

标签: java lambda


【解决方案1】:

这是一个例子:

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

在此示例中,Supplier<M> mapSupplierHashMap::new,一个能够创建空 Map 的工厂。

【讨论】:

    【解决方案2】:

    你提到的方法让你决定两者:

    • 具体的地图实现(例如HashMapConcurrentHasMap等)
    • 该实现的具体实例(您可以传递新创建的实例或很久以前在应用程序堆上创建的某个实例)

    与此方法相比,在其他 2 个重载版本中,map 的实现将由库选择并创建它的新实例。

    【讨论】:

    • 有道理。谢谢你。不过最后一件事。如果没有该供应商参数,将“按库”选择实现是什么意思?
    猜你喜欢
    • 2015-09-23
    • 2017-04-14
    • 2020-02-09
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多