我一直在查看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方法,因为它们只接受一个参数。
代码有效,所以我只是遗漏了一些东西。任何帮助表示赞赏。