2 回答
TA贡献1963条经验 获得超6个赞
仅Collector.of(Supplier, BiConsumer, BinaryOperator, [Function,] Characteristics...)用于这些情况:
Collector.of(() -> new double[2],
(a, t) -> { a[0] += t.getAge(); a[1]++; },
(a, b) -> { a[0] += b[0]; a[1] += b[1]; return a; },
a -> (a[1] == 0) ? 0.0 : a[0] / a[1])
)
虽然定义 a 可能更具可读性PersonAverager:
class PersonAverager {
double sum = 0;
int count = 0;
void accept(Person p) {
sum += p.getAge();
count++;
}
PersonAverager combine(PersonAverager other) {
sum += other.sum;
count += other.count;
return this;
}
double average() {
return count == 0 ? 0 : sum / count;
}
}
并将其用作:
Collector.of(PersonAverager::new,
PersonAverager::accept,
PersonAverager::combine,
PersonAverager::average)
添加回答
举报