java streams:直截了当地减少 [英] java streams: straightforward reduce

查看:152
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆