如果您不介意使用额外的图书馆,我们最近已经将元组收藏家的支持添加到了
jOOλ.
Tuple2 avg = points.stream().collect(
Tuple.collectors(
Collectors.averagingDouble(p -> p.x),Collectors.averagingDouble(p -> p.y)
)
);
在上面的代码中,Tuple.collectors()将几个java.util.stream.Collector实例组合成一个收集器,将各个值收集到一个元组中.
如果您想自己滚动,而不是创建依赖关系,相关方法如下所示:
static Collector,Tuple2> collectors(
Collector collector1,Collector collector2
) {
return Collector.of(
() -> tuple(
collector1.supplier().get(),collector2.supplier().get()
),(a,t) -> {
collector1.accumulator().accept(a.v1,t);
collector2.accumulator().accept(a.v2,t);
},(a1,a2) -> tuple(
collector1.combiner().apply(a1.v1,a2.v1),collector2.combiner().apply(a1.v2,a2.v2)
),a -> tuple(
collector1.finisher().apply(a.v1),collector2.finisher().apply(a.v2)
)
);
}
其中Tuple2只是两个值的简单包装.你也可以使用AbstractMap.SimpleImmutableEntry或类似的东西.