java - java - 如何计算Java 8中嵌套类结构中属性的总和?
问题描述
我有3个类,A类,B类,C类。A类包含B类列表,B类包含C类列表。C类包含原语。
class A {
List<B> bList;
//getter
}
class B {
List<C> cList;
//getter
}
class C {
int a;
int b;
int c;
//getter
}
我想做以下事情。
A aInstance = new A();
List<B>bs = aInstance.getBList();
for(B b: bs) {
List<C> cs = b.getCList();
for(C c: cs) {
sum_a += c.a;
sum_b_c += c.b + c.c;
}
}
如何使用 java 8 特定流实现这一点?
解决方案
例如,您可以reduce
将其设置为具有两个元素的 int 数组:
int[] result = aInstance
.getBList()
.stream()
.flatMap(b -> b.getcList().stream())
.map(c -> new int[] { c.a, c.b + c.c })
.reduce((left, right) -> {
int[] newV = new int[2];
newV[0] = left[0] + right[0];
newV[1] = left[1] + right[1];
return newV;
})
.orElse(new int[] { 0, 0 });
或者甚至更好collect
(不要创建很多int []
对象):
int[] result = aInstance
.getBList()
.stream()
.flatMap(b -> b.getCList().stream())
.collect(
() -> new int[2],
(arr, c) -> {
arr[0] += c.a;
arr[1] += c.b + c.c;
},
(left, right) -> {
left[0] += left[0];
right[1] += right[1];
});
推荐阅读
- java - Xamarin.Android 中的后台执行
- javascript - 如何将一些 HTML/文本添加到 Javascript 文本输出中?我似乎只能要么只做 JS 要么只做文本,不能两者兼而有之
- rest - 如何在使用 Spring Boot 和 Spring Data Jpa 时使用 Rest Service
- arrays - 如何在 REACT JS API 调用中迭代 JSON 嵌套数组?
- rest - Restful API 从资源中获取操作数据
- c - 如果编程语言具有数据类型但没有运算符重载,它仍然可以称为“类型化”吗?
- javascript - 是否有将非结构化数据转换为 csv 的 npm 包?
- javascript - 单击按钮时如何从 HTML 调用导出的函数?
- r - 如何创建一行中每个数字比前一个数字小 10 倍的列?
- powershell - 用于检查变量的 Powershell 退出脚本