如何使用流java获取列表中列表中元素的大小

Jon*_*gen 1 java list java-stream

我正在寻找使用流在列表中的列表中的项目数量的最简单方法。这是示例:

public class ObjectA {
    private List<ObjectB> objectBList;
}

public class ObjectB {
    private List<long> idList;


}
Run Code Online (Sandbox Code Playgroud)

我有一个 ObjectA 的列表。我想找出ObjectB我在列表中的数量。这是我能想到的最简单的形式:

long count = 0;
List<ObjectA> objectAList = getListObjectA();
for (ObjectA objectA : objectAList) {
    count += objectA.getObjectBList().size();
}
Run Code Online (Sandbox Code Playgroud)

是否有比使用流更简单的格式?我将不得不遍历列表中的每个元素并获得第二个列表的大小。

YCF*_*F_L 6

是否有比使用流更简单的格式?

是的,您可以使用:

long count = objectAList.stream()
        .mapToLong(objectA -> objectA.getObjectBList().size())
        .sum();
Run Code Online (Sandbox Code Playgroud)

或者也:

long count = objectAList.stream()
        .map(ObjectA::getObjectBList)
        .mapToLong(List::size)
        .sum();
Run Code Online (Sandbox Code Playgroud)

@Holger 提到的另一种聪明的方法,您可以使用flatMapwith count

long count = objectAList.stream()
        .flatMap(objectA -> objectA.getObjectBList().stream())
        .count();
Run Code Online (Sandbox Code Playgroud)

或者:

long count = objectAList.stream()
        .map(ObjectA::getObjectBList)
        .flatMap(List::stream)
        .count();
Run Code Online (Sandbox Code Playgroud)