将列表中的列表提取为单个列表

use*_*345 5 java list java-8 java-stream collectors

我有两个 POJO,示例代码如下

class A {
    String name;
    Object entries; // this can be a List<String> or a string - hence Object datatype
   //getters and setter here
}

class B {
    int snumber;
    List<A> values;
   //getters and setters here
}
Run Code Online (Sandbox Code Playgroud)

控制器类

class ControllerA {
    public getList(B b) {
        List<String> list = b.getValues().stream.map(e -> e.getEntries()).collect(Collectors.toList()));
    }
}
Run Code Online (Sandbox Code Playgroud)

这会返回一个列表列表:

[[12345, 09876], [567890, 43215]]
Run Code Online (Sandbox Code Playgroud)

但我想要的是一个像

[12345,09876,567890, 43215]
Run Code Online (Sandbox Code Playgroud)

我怎样才能用 Java 8 流做到这一点?

我也试过flatMap,但这与Object条目的数据类型不符。

And*_*lko 9

考虑List<String>作为一个字段entriesA类。

正如@Eugene在评论中提到的,

如果它是一个单一的 String 使它成为List一个单一的元素;如果它是一个包含多个字符串的列表,那么就这样做。

使用单一类型的集合可以简化过程:

b.getValues()                           // -> List<A>
        .stream()                       // -> Stream<A>
        .map(A::getEntries)             // -> Stream<List<String>>
        .flatMap(Collection::stream)    // -> Stream<String>
        .collect(Collectors.toList());  // -> List<String>
Run Code Online (Sandbox Code Playgroud)