当构造函数中定义的类型为BiConsumer时,Collectors类中的构造函数如何接受Function参数

时间:2019-07-12 16:32:02

标签: java-8 collectors

我是Java 8的新手,正在尝试了解Collectors类的工作方式。我发现Collector正在返回实现Collector接口的CollectorImpl实例。为CollectorImpl定义的构造函数如下

CollectorImpl(Supplier<A> supplier,
                      BiConsumer<A, T> accumulator,
                      BinaryOperator<A> combiner,
                      Function<A,R> finisher,
                      Set<Characteristics> characteristics) {
            this.supplier = supplier;
            this.accumulator = accumulator;
            this.combiner = combiner;
            this.finisher = finisher;
            this.characteristics = characteristics;
        }

Collectors类的联接方法是使用以下代码创建CollectorImpl的实例。

public static Collector<CharSequence, ?, String> 
joining(CharSequence delimiter,CharSequence prefix,CharSequence suffix) {
  return new CollectorImpl<>(
  () -> new StringJoiner(delimiter, prefix, suffix),
  StringJoiner::add, // Not able to understand how is it a BiConsumer 
  StringJoiner::merge,
  StringJoiner::toString, 
  CH_NOID);
    }

我无法理解上述代码中的第二个参数。双消费者表示具有两个参数且返回类型为void的方法。但是我可以看到StringJoiner :: add方法具有一个CharSequence输入参数和StringJoiner的返回类型。

为什么代码会编译。我确定我的理解存在一定差距,但是尽管努力,但我仍然无法理解我要去哪里。

请帮助我理解这一点。

0 个答案:

没有答案