繁体   English   中英

如何在 Java8 流中按属性分组的对象中计算多个总和?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM