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)
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)
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |