Java 如何计算嵌套列表的项目数?

Java 如何计算嵌套列表的项目数?,java,java-8,java-stream,Java,Java 8,Java Stream,如何使用流API计算嵌套列表的项 想象3个嵌套列表: List<OuterList> outerLists; class OuterList { List<Sublist> subLists; } class Sublist { List<String> items; } 您可以使用flatMap将流转换为流,然后转换为所有最内层列表中所有字符串的流: outerLists.stream() .flatMap(ol -

如何使用流API计算嵌套列表的项

想象3个嵌套列表:

List<OuterList> outerLists;

class OuterList {
    List<Sublist> subLists;
}

class Sublist {
    List<String> items;
}

您可以使用
flatMap
转换为
,然后转换为所有最内层列表中所有
字符串的

outerLists.stream()
          .flatMap(ol -> ol.subLists().stream())
          .flatMap(s->s.items.stream()).count();
但是,如果存在重复项,它们将被计数多次。

您可以使用:


这将比平面映射整个子列表更有效,因为在这里,我们只是将每个子列表映射到其项的大小。这里的想法是将
平面映射到
IntStream
,其中每个外部被替换为一个由其所有内部列表大小组成的流。然后,我们将这些值相加。

无论您想对流执行什么操作,
forEach
在99%的情况下都不是适合作业的工具。
outerLists.stream()
          .flatMap(ol -> ol.subLists().stream())
          .flatMap(s->s.items.stream()).count();
outerLists.stream()
          .flatMapToInt(outer ->
              outer.subLists.stream().mapToInt(sub -> sub.items.size())
          )
          .sum();