Java 8中如何用Lambda/FP实现嵌套列表元素总数统计(单行代码)
Java 8 一行代码实现嵌套列表元素总数累加的函数式方案
嘿,这个需求用Java 8引入的Stream API就能完美解决,一行代码搞定,还兼顾了可读性和简洁性!
你原来的循环逻辑是遍历listOfClassB里的每个ClassB实例,累加其内部anotherObjList的元素个数。用函数式编程改写的话,核心思路就是把集合转换成流,然后映射出每个列表的大小,最后求和:
int totalNo = listOfClassB.stream() .mapToInt(classB -> classB.getAnotherObjList().size()) .sum();
要是怕getAnotherObjList()返回null导致空指针异常,还可以加个安全处理,比如用Optional或者空判断来兜底:
// 方式1:显式空判断 int totalNo = listOfClassB.stream() .mapToInt(classB -> classB.getAnotherObjList() != null ? classB.getAnotherObjList().size() : 0) .sum(); // 方式2:用Optional处理更优雅 int totalNo = listOfClassB.stream() .map(ClassB::getAnotherObjList) .filter(Objects::nonNull) .mapToInt(List::size) .sum();
另外提一句,如果你的数据集很大,还可以把stream()换成parallelStream()来启用并行计算,利用多线程提升效率——当然小数据量的话串行流就足够了,性能和普通循环差别不大,但代码整洁度提升不少。
内容的提问来源于stack exchange,提问作者Saad
相关产品推荐
相关产品推荐

