将Collection <String []>的流转换为List <String> []

Fai*_*iry 0 java java-8 java-stream

我有一段代码:

table.stream().filter(row -> !hash.containsKey(row[keyColumnNumber]))
.map(row -> row[keyColumnNumber]).map(hash::get)
Run Code Online (Sandbox Code Playgroud)

最后一步:.map(hash::get)退货Collection<String[]>.因此我需要将所有这些收集到List.

.collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)

返回List>期望的内容,但是

.flatMap(Stream::of).collect(Collectors.toList()).collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)

返回相同的结果.

YCF*_*F_L 5

您可以像这样使用flatMap:

List<String> list = table.stream()
        .map(row -> hash.get(row[keyColumnNumber]))
        .filter(Objects::nonNull)
        .flatMap(Arrays::stream)
        .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

  • 当`hash.containsKey(row [keyColumnNumber])`返回`false`时,后续的`hash.get(row [keyColumnNumber])`(她分成两个操作)将返回`null`.这听起来不是很有用.我想,实际意图是接受`containsKey`返回`true`的元素.通常,只使用`get`而没有前面的`containsKey`更有效:`table.stream().map(row - > hash.get(row [keyColumnNumber])).filter(Objects :: nonNull).flatMap (阵列::流).collect(Collectors.toList());` (2认同)