Java Lambda 多次求和

标签 java lambda

我有一个类——

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 优雅的方式来实现这一目标?

最佳答案

您可以使用 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;
}

关于Java Lambda 多次求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60473945/

相关文章:

java - Java 8 中的 IntStream forEach 方法

java - 如果编译器可以内联日志调用,为什么还要在日志 API 中使用 lambda 表达式

javascript - 发电机 : How to append to list values in document

Java:方法返回类型为数组错误

java - 在 TextView 中显示编辑文本的值

java - 在 couchbase 中存储数据(java 对象)

c++ - 使用 lambda 作为试运行选项正常吗?

java - 了解 FlateDecode 编码的 PDF 流

java - 将 ResultSet 分配给类中的变量

c# - 用 try catch 包装的动态 lambda