gpt4 book ai didi

java - 使用流查找 Employee 及其 Parent 的值总和

转载 作者:行者123 更新时间:2023-12-05 05:44:16 25 4
gpt4 key购买 nike

考虑一下,我有以下类(class)。

public class Employee {

private Integer id;
private Integer parentId;
private int value;
}

现在我有以下记录。

    Employee employee1 = new Employee(1, null, 4);
Employee employee2 = new Employee(2, 1, 4);
Employee employee3 = new Employee(3, null, 8);
Employee employee4 = new Employee(4, 1, 3);
Employee employee5 = new Employee(5, 2, 11);

所以 parentIdid一个员工是另一个员工的老板。

问题是找出 sum employee 的值和它的父级(如果有的话),或者返回值事实上。所以在这种情况下,结果应该是。

<表类="s-表"><头>id值<正文>14283847515

如何使用 Java 8 流实现这一点?我尝试了以下方法;

  Optional<Integer> first = employees.stream().map(a -> {
int sum = 0;
employees.stream().map(b -> {
if (Objects.equals(a.id, b.parentId)) {
sum = sum + a.value + b.value;
}else{
sum = sum + a.value;
}
return sum;
});
return sum;
}
).findFirst();

但是我在 sum 变量上遇到错误,它应该是最终的或实际上是最终的。

最佳答案

实现该目标的最有效方法是创建一个 map ,它将允许检索 valueEmployee通过其id .

然后,为了合并 value每个 Employee与其 parent 的 value ,使用 ma​​p0 中的如果 parentnull .

下面的方法生成一个带有id map 用作 和员工的 value作为一个

public static Map<Integer, Integer> getEmplValueById(List<Employee> employees) {
return employees.stream()
.collect(Collectors.toMap(Employee::getId,
Employee::getValue));
}

以下方法创建了一个带有id map 用作,员工的总值用作 map 的

public static Map<Integer, Integer> getEmplSumById(List<Employee> employees,
Map<Integer, Integer> valueById) {
return employees.stream()
.collect(Collectors.toMap(Employee::getId,
empl -> empl.getValue() +
valueById.getOrDefault(empl.getParentId(), 0)));
}

main()

public static void main(String[] args) {
List<Employee> employees = List.of(
new Employee(1, null, 4),
new Employee(2, 1, 4),
new Employee(3, null, 8),
new Employee(4, 1, 3),
new Employee(5, 2, 11));

Map<Integer, Integer> valueById = getEmplValueById(employees);

getEmplSumById(employees, valueById)
.forEach((k, v) -> System.out.printf("ID %d \t value %d\n", k, v));
}

输出

ID 1     value 4
ID 2 value 8
ID 3 value 8
ID 4 value 7
ID 5 value 15

关于java - 使用流查找 Employee 及其 Parent 的值总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71613800/

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