在另一个列表中累计列表的数量

Saa*_*aad 8 java functional-programming java-8 java-stream

目前我的代码如下.嵌入在另一个列表中的列表,我想获得嵌入列表对象的总数.

我想为此写一个快速的oneliner.我能用Java 8做一个有效的Lambda或FP技巧吗?

int totalNo = 0;
for (ClassB classB : listOfClassB) {
    totalNo+= classB.getAnotherObjList().size();
}
Run Code Online (Sandbox Code Playgroud)

Val*_*ano 9

long totalSum = listOfClassB.stream()
     .mapToInt(elem -> elem.getAnotherObjList().size())
     .sum();
Run Code Online (Sandbox Code Playgroud)

我认为sum的结果是long几个整数可以超过max int值; 如果你确信它不会导致溢出,你总是可以施放它.

它至少不像上面那样格式化,但可以说它只适用于单个表达式.

如果第一个列表中的元素和元素为null,或者如果getAnotherObjList()返回null,则可以通过过滤掉这些情况来支持它:

long totalSum = listOfClassB.stream()
     .filter(Objects::nonNull)
     .map(ClassB::getAnotherObjList)
     .filter(Objects::nonNull)
     .mapToInt(List::size)
     .sum();
Run Code Online (Sandbox Code Playgroud)