Java流和列表列表

Clo*_*mez 6 java java-stream

出于某种原因,我无法解决如何使用流将这个深层嵌套列表转换为新列表的问题.

   every A in List<A> contains -> 
   List<B> where every B contains -> 
   List<C> where every C contains -> List<String>
Run Code Online (Sandbox Code Playgroud)

我尝试了许多不同的迭代,如:

  List<String> newlist =  listA.getB()
                   .stream()
                   .filter(b -> b.getC()
                   .stream()
                   .filter(c -> c.getPeople)
                   .collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)

我充满了困惑......我可以通过for循环轻松完成这项工作,但我听说流简单易用,我想开始更多地使用它们.

Era*_*ran 11

你应该使用flatMap:

List<String> newList =
    listA.stream() // Stream<A>
         .flatMap(a->a.getB().stream()) // Stream<B>
         .flatMap(b->b.getC().stream()) // Stream<C>
         .flatMap(c->c.gtPeople().stream()) // Stream<String>
         .collect(Collectors.toList()); // List<String>
Run Code Online (Sandbox Code Playgroud)