【问题标题】:How do I get size of element in a list that is in a list using stream java如何使用流java获取列表中元素的大小
【发布时间】:2020-11-18 16:22:25
【问题描述】:

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

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

public class ObjectB {
    private List<long> idList;


}

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

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

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

【问题讨论】:

    标签: java list java-stream


    【解决方案1】:

    还有比这个使用流更简单的格式吗?

    是的,您可以使用:

    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();
    

    【讨论】:

    • .count() 在这里没有做你想做的事。
    • 他正在添加列表的大小而不计算它们。
    • @Eritrean 我同意,我没看错,改一下吧!
    【解决方案2】:
    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());
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-30
      • 2015-05-24
      相关资源
      最近更新 更多