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)
是否有比使用流更简单的格式?我将不得不遍历列表中的每个元素并获得第二个列表的大小。
是否有比使用流更简单的格式?
是的,您可以使用:
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)