java streams:直截了当地减少 [英] java streams: straightforward reduce
本文介绍了java streams:直截了当地减少的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个 MetricGroup
的流,其中:
public class MetricGroup {
private int uploadedDocs;
private long uploadedKbs;
// getters and setters
}
我需要在一个指标中对所有指标进行sumarize。我的意思是,我需要将所有 metric.uploadedDocs
添加到 sumMetric.uploadedDocs
和指标中.uploadedKds
到 sumMetric.uploadedKbs
。
I need to sumarize all metrics in one single metric. I mean, I need to add all metric.uploadedDocs
into a sumMetric.uploadedDocs
and metric.uploadedKds
into a sumMetric.uploadedKbs
.
我发现我需要某种 reduce
Stream.of(new MetricGroup(1,100), new MetricGroup(1,200))
.reduce(????);
任何想法?
推荐答案
你可以使用 reduce
:
You can use this overload of reduce
:
T reduce(T identity,
BinaryOperator<T> accumulator)
像这样:
.reduce(new MetricGroup(0, 0),
(x, y) -> new MetricGroup(
x.getUploadedDocs() + y.getUploadedDocs()
x.getUploadedKbs() + y.getUploadedKbs()
)
)
您还可以使用 collect
方法:
private static MetricGroup combine(MetricGroup x, MetricGroup y) {
x.setUploadedDocs(x.getUploadedDocs() + y.getUploadedDocs());
x.setUploadedKbs(x.getUploadedKbs() + y.getUploadedKbs());
return x;
}
// ....
.collect(() -> new MetricGroup(0, 0),
YourClass::combine,
YourClass::combine
)
这篇关于java streams:直截了当地减少的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文