Java Lambdas多重求和

问题描述 投票:4回答:1

我有课-

public class LocationStats {

    private String state;
    private String country;
    private int latestTotalCases;
    private int diffFromPrevDay;
    private int diffFromPrev2Day;
    private int diffFromPrev3Day;
}

我在摘要下方使用的某个国家/地区的总总结数最高,效果很好。

List<LocationStats> newStats= getData(); 
    Map<String, Integer> collect = 
                    newStats
                    .stream()
                    .collect(Collectors.groupingBy(LocationStats::getCountry, Collectors.summingInt(LocationStats::getLatestTotalCases)));

我还想在处理上述代码段时总结其他3个属性。可能吗 ?有什么Lambda-elegant方法可以实现吗?

java lambda
1个回答
5
投票

您可以将Collectors.toMap与合并功能一起使用。

例如:

Map<String,LocationStats> sums =
    newStats.stream()
            .collect(Collectors.toMap(LocationStats::getCountry,
                                      Function.identity(),
                                      (s1,s2)->new LocationStats(s1,s2)));

[您必须创建一个接受两个LocationStats实例的LocationStats构造函数,并创建一个包含这两个实例的属性之和的实例:

public LocationStats (LocationStats s1, LocationStats s2)
{
    this.state = s1.state;
    this.country = s1.country;
    this.latestTotalCases = s1.latestTotalCases + s2.latestTotalCases;
    this.diffFromPrevDay = s1.diffFromPrevDay + s2.diffFromPrevDay;
    this.diffFromPrev2Day = s1.diffFromPrev2Day + s2.diffFromPrev2Day;
    this.diffFromPrev3Day = s1.diffFromPrev3Day + s2.diffFromPrev3Day;
}
© www.soinside.com 2019 - 2024. All rights reserved.