将Stream <Stream <T >>转换为List <T>

Joy*_*Joy 3 java lambda java-8 java-stream

我是Java 8的新手。我编写了以下代码:

Stream<Stream<POLine>> list = poSearchResponseList.stream().map(poSearchResponse ->
        poSearchResponse.getDeliveryDocumentLines().stream().map(deliveryDocumentLine ->
                POLine.builder()
                        .poLineNumber(deliveryDocumentLine.getPurchaseReferenceLineNumber())
                        .quantity(deliveryDocumentLine.getExpectedQty())
                        .vnpkQty(deliveryDocumentLine.getVnpkQty())
                        .build()));
Run Code Online (Sandbox Code Playgroud)

我想得到

List<POList>
Run Code Online (Sandbox Code Playgroud)

从这个右手表达。无法理解如何将此流流转换为列表。

Era*_*ran 7

使用flatMap,将a转换Stream<Stream<POLine>>为a 并不容易Stream<POLine>

List<POLine> output = 
    list.flatMap(Function.identity())
        .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

尽管List<POLine>直接生成一个可能更简单:

List<POLine> list = 
    poSearchResponseList.stream()
                        .flatMap(posr -> posr.getDeliveryDocumentLines()
                                             .stream()
                                             .map(dl -> 
                                                 POLine.builder()
                                                       .poLineNumber(dl.getPurchaseReferenceLineNumber())
                                                       .quantity(deliveryDocumentLine.getExpectedQty())
                                                       .vnpkQty(deliveryDocumentLine.getVnpkQty())
                                                       .build()))
                        .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)