Actualmente tengo un código como abajo. Una lista incrustado con en otra lista, y quiero obtener el recuento total de los objetos de la lista embebidos.
Quiero escribir un oneliner rápida para esto. ¿Hay una manera eficiente Lambda o FP truco que puedo hacer en Java 8?
int totalNo = 0;
for (ClassB classB : listOfClassB) {
totalNo+= classB.getAnotherObjList().size();
}
long totalSum = listOfClassB.stream()
.mapToInt(elem -> elem.getAnotherObjList().size())
.sum();
Creo que el resultado de la suma es un long
como varios números enteros pueden ir más allá del valor int max; siempre se puede lanzas si está seguro de que no va a resultar en desbordamiento.
No es absolutamente un de una sola línea, al menos, como el formato anterior, pero podría decirse que encaja en una sola expresión.
En caso y los elementos de la primera lista es nula o si getAnotherObjList () devuelve un valor nulo que puede soportar que mediante la filtración de esos casos:
long totalSum = listOfClassB.stream()
.filter(Objects::nonNull)
.map(ClassB::getAnotherObjList)
.filter(Objects::nonNull)
.mapToInt(List::size)
.sum();