我有一个类——
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/