Jor*_*rdi 6 java java-8 java-stream
我有一个流MetricGroup,其中:
public class MetricGroup {
private int uploadedDocs;
private long uploadedKbs;
// getters and setters
}
Run Code Online (Sandbox Code Playgroud)
我需要在一个指标中对所有指标进行sumarize.我的意思是,我需要所有添加metric.uploadedDocs到sumMetric.uploadedDocs和metric.uploadedKds成sumMetric.uploadedKbs.
我想我需要某种东西 reduce
Stream.of(new MetricGroup(1,100), new MetricGroup(1,200))
.reduce(????);
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
你可以使用这个重载reduce:
T reduce(T identity,
BinaryOperator<T> accumulator)
Run Code Online (Sandbox Code Playgroud)
像这样:
.reduce(new MetricGroup(0, 0),
(x, y) -> new MetricGroup(
x.getUploadedDocs() + y.getUploadedDocs()
x.getUploadedKbs() + y.getUploadedKbs()
)
)
Run Code Online (Sandbox Code Playgroud)
您还可以使用以下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
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
159 次 |
| 最近记录: |