[英]How to calculate multiple sum in an object grouping by a property in Java8 stream?
我正在用一些数据做一些计算。 该对象有几个数字属性。 我已经实现了按一个属性的类型计算分组。 但需要对每个数值进行计算。 那么,有没有什么方法可以解决这个问题呢?
Person p1 = new Person("p1","type1",18,3);
Person p2 = new Person("p2","type2",10,6);
Person p3 = new Person("p3","type1",5,8);
List<Person> personList = new ArrayList<>();
personList.add(p1);
personList.add(p2);
personList.add(p3);
Map<String, Integer> collect =
personList.stream().collect(
Collectors.groupingBy(
Person::getType,Collectors.summingInt(Person::getAge)
)
);
我期望每个属性的总和和单个结果映射。 地图的值是一个地图/数组/列表。 例如:
type1 [23,11]
type2 [10,6]
正如评论中所指出的,在这里定义输出的类型很重要。 要添加有关如何计划执行此操作的要点,您可以将Collectors.toMap
与自定义mergeFunction
一起使用为:
List<Person> personList = new ArrayList<>();
Map<String, Person> collect = personList.stream()
.collect(Collectors.toMap(Person::getType, a -> a, (p1, p2) ->
new Person(p1.getX(), p1.getType(),
p1.getAge() + p2.getAge(),
p1.getCode() + p2.getCode()))); // named the other attribute 'code'
现在,针对每种type
您都有一个带有整数值相加的Person
对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.