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

plicqrtu  于 2021-07-11  发布在  Java
关注(0)|答案(2)|浏览(338)

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

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

public class ObjectB {
    private List<long> idList;

}

我有一份反对者的名单。我想知道有多少 ObjectB 我已经在名单上了。这是我能想到的最简单的形式:

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

有没有比使用流更简单的格式?我必须遍历列表中的每个元素,并得到第二个列表的大小。

csbfibhn

csbfibhn1#

有没有比使用流更简单的格式?
是的,您可以使用:

long count = objectAList.stream()
        .mapToLong(objectA -> objectA.getObjectBList().size())
        .sum();

或者:

long count = objectAList.stream()
        .map(ObjectA::getObjectBList)
        .mapToLong(List::size)
        .sum();

另一个聪明的方法是@holger提到的,你可以使用 flatMapcount 因此:

long count = objectAList.stream()
        .flatMap(objectA -> objectA.getObjectBList().stream())
        .count();

或:

long count = objectAList.stream()
        .map(ObjectA::getObjectBList)
        .flatMap(List::stream)
        .count();
3qpi33ja

3qpi33ja2#

public static void main(String[] args) {
    List<Integer> list = new ArrayList<>();
    list.add(1);
    list.add(1);
    list.add(1);
    list.add(1);
    list.add(1);
    System.out.println(list.stream().count());
}

相关问题