当前位置: 首页 > 知识库问答 >
问题:

为什么Collector接口的组合器与重载的collect方法不一致?

百里泓
2023-03-14
<R> R collect(Supplier<R> supplier,
          BiConsumer<R,? super T> accumulator,
          BiConsumer<R,R> combiner)

组合器函数可以将状态从一个参数折叠到另一个参数中并返回该参数,或者返回一个新的结果容器。

为什么前一个collect方法不接收BinaryOperator

共有1个答案

司徒啸
2023-03-14

collect的“内联”(3-arg)版本是为已经有这些函数的情况而设计的。例如:

ArrayList<Foo> list = stream.collect(ArrayList::new, 
                                     ArrayList::add,
                                     ArrayList::addAll);

BitSet bitset = stream.collect(BitSet::new, 
                               BitSet::set,
                               BitSet::or);

虽然这些只是激励的例子,但我们对类似的现有构建器类的探索表明,现有合并器候选的签名更适合转换为BiConsumer,而不是BinaryOperator。提供您所要求的“灵活性”会使这个重载在其设计支持的情况下变得不那么有用--也就是说,当您已经拥有了大量的函数,并且您不想仅仅为了收集它们而创建(或学习创建)收集器时。

 类似资料:
  • 我们知道,如果我们想创建一个类的对象,就必须实现接口的所有方法。但是为什么不需要在java中同时实现接口的和? 我同意目的已经解决了,但即使如此,如果我们重写(),为什么不强制重写()?

  • 本文向大家介绍Mapper 接口的工作原理是什么?Mapper 接口里的方法,参数不同时,方法能重载吗?相关面试题,主要包含被问及Mapper 接口的工作原理是什么?Mapper 接口里的方法,参数不同时,方法能重载吗?时的应答技巧和注意事项,需要的朋友参考一下 Dao 接口即 Mapper 接口。接口的全限名,就是映射文件中的 namespace 的值;接口的方法名,就是映射文件中 Mapper

  • 类集合有一些静态方法作为实用工具来操作集合,如List。例如,排序方法(Collections.sort(list))。我不理解为什么Java规范制作了另一个类来承载排序方法(以及所有其他类,如binarySearch),而不列出接口和具体的子类,如ArrayList和LinkedList,来实现这些方法。 已更新 当我做了一个全球性的研究并阅读了这篇文章的答案时,我不得不说(鸟瞰图):一些人(我

  • 问题内容: 我对此事仍然有些困惑。我到目前为止发现的是 (这里已经问过类似的问题,但我还有其他几点。) 接口是仅抽象方法和最终字段的集合。 Java中没有多重继承。 接口可以用于在Java中实现多重继承。 继承的一个强项是我们可以在派生类中使用基类的代码,而无需再次编写。可能这是继承在那里最重要的事情。 现在.. Q1。由于接口仅具有抽象方法(无代码),因此,如果我们实现任何接口,那么该如何继承呢

  • 问题内容: 在Java中,为什么不能在接口中使用受保护的方法? 由于根据Java规范 受保护的访问(由关键字protected表示)-同一包中任何类型以及任何包中的子类均可访问的字段或方法。 如果我必须使用该接口,那么我将实现它并覆盖方法。因此,如果我要实现类可以访问这些方法的位置,因为该方法可以在任何包中访问。那么,将方法声明为Interface中的保护有什么害处? 问题答案: 受保护的方法旨在

  • 为了对对象的集合进行排序,我们有Comparable和Collection接口,因此我们覆盖了对象存储在Collection中的our类中接口的相应方法。但在排序时,我们调用Collections.sort(List)和Collections.sort(List,Comparator)类的静态方法对集合中的对象进行排序。所以我需要知道这个排序方法和我们重写的接口方法之间的联系是什么,sort方法内