Stream.collect和BiConsumer

时间:2017-08-22 01:22:05

标签: java java-stream

我一直在查看Oracle Java教程中的Stream.collect缩减,请点击此处:https://docs.oracle.com/javase/tutorial/collections/streams/reduction.html

查看示例代码,本教程将创建一个实现Averager的新IntConsumer类,即实现接受,只接受一个参数,使其成为“单个”消费者。

class Averager implements IntConsumer
{
  private int total = 0;
  private int count = 0;

  public double average() {
    return count > 0 ? ((double) total)/count : 0;
  }

  public void accept(int i) { total += i; count++; }

  public void combine(Averager other) {
    total += other.total;
    count += other.count;
  }
}

此代码稍后使用:

Averager averageCollect = roster.stream()
  .filter(p -> p.getGender() == Person.Sex.MALE)
  .map(Person::getAge)
  .collect(Averager::new, Averager::accept, Averager::combine);

我的问题是:collect方法需要一个供应商和两个BiConsumers,但看起来Averager :: accept和Averager :: combiner只是Consumer方法,因为它们只接受一个参数。

代码有效,所以我只是遗漏了一些东西。任何帮助表示赞赏。

0 个答案:

没有答案