gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:41:45 26 4
gpt4 key购买 nike

我正在用一些数据进行一些计算。该对象具有多个数字属性。我已经实现了按一个属性的类型进行计算分组。但需要计算每个数值。那么,有什么方法可以解决这个问题吗?

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 对象,其中整数值相加。

关于java - 如何计算按Java8流中的属性分组的对象中的多个总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55506989/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com