背景
有一类似场景:c包含b 、b包含a ,计算 list中的所有数值?
list<C> listC
class C {
Map<String, ClassB>
}
classB {
Map<String, ClassA>
}
classA {
int value;
}
int sumOfValues = ?
解决方案
Integer result = C_list.stream()
.flatMap(s -> s.getC_map().values().stream())
.flatMap(s -> s.getB_map().values().stream())
.map(A -> A.getValue())
.reduce(0,Integer::sum);
int sum = list.stream()
.flatMap(c -> c.getMap().values().stream())
.flatMap(b -> b.getMap().values().stream())
.mapToInt(A::getValue)
.sum();
int sum = listC.stream()
.flatMap(c1 -> c1.map.values().stream())
.flatMap(b1 -> b1.map.values().stream())
.collect(Collectors.summingInt(a -> a.value))
思路的总结
flatMap接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流。
注意:flatMap和map的区别,前置方法中需要返回流类型,后者可以支持返回任意类型,