所以我有这样的结构
List<Object1> list1
class Object1{
private List<Object2> list2
}
class Object2{
private List<Object3> list3
}
我需要获取所有Objects3实例的计数。 我是java-8和流技术的新手,所以这对我来说很混乱,但是我试图这样做。
Integer count =
list1
.parallelStream()
.reduce(0,(sum, q) -> q.getList2()
.forEach()
.reduce(0,(sum2, q2) -> sum2 + q2.getList3().size()));
我还靠近吗?
答案 0 :(得分:2)
鉴于您是流API的新手,所以我不怪您,但是您的方法过于复杂。
为了简化和可读性,我个人会采用这种方法。
list1.stream() // Stream<Object1>
.flatMap(s -> s.getList2().stream()) // Stream<Object2>
.flatMap(s -> s.getList3().stream()) // Stream<Object3>
.count(); // return the count of all Object3 instances
答案 1 :(得分:0)
由于您需要每个list3
实例中Object2
的大小的 ,因此可以将flatMapToInt
与嵌套的mapToInt
一起使用将sum
计算为:
int count = list1
.stream()
.flatMapToInt(obj1 -> obj1.getList2()
.stream()
.mapToInt(obj2 -> obj2.getList3().size()))
.sum();