![](/img/trans.png)
[英]Convert List<List<String>> to Stream<Stream<String>>
[英]Convert Stream of Collection<String[]> to List<String>[]
我有一段代码:
table.stream().filter(row -> !hash.containsKey(row[keyColumnNumber]))
.map(row -> row[keyColumnNumber]).map(hash::get)
最后一步: .map(hash::get)
返回Collection<String[]>
。 结果,我需要将所有这些收集到List中。
.collect(Collectors.toList())
返回List>预期的结果,但是
.flatMap(Stream::of).collect(Collectors.toList()).collect(Collectors.toList())
返回相同的结果。
您可以像这样使用flatMap:
List<String> list = table.stream()
.map(row -> hash.get(row[keyColumnNumber]))
.filter(Objects::nonNull)
.flatMap(Arrays::stream)
.collect(Collectors.toList());
如果
table.stream().filter(row -> !hash.containsKey(row[keyColumnNumber]))
.map(row -> row[keyColumnNumber]).map(hash::get)
返回Stream<Collection<String[]>>
并且您需要List<String[]>
,您确实需要flatMap
:
List<String[]> result = table.stream()
.filter(row -> !hash.containsKey(row[keyColumnNumber]))
.map(row -> row[keyColumnNumber])
.map(hash::get) // Stream<Collection<String[]>>
.flatMap(Collection::stream) // Stream<String[]>
.collect(Collectors.toList()); // List<String[]>
正如Aomine所说,应该有可能将map
和flatMap
调用加入到一个flatMap
。
List<String[]> result = table.stream()
.filter(row -> !hash.containsKey(row[keyColumnNumber]))
.flatMap(row -> hash.get(row[keyColumnNumber]).stream()) // Stream<String[]>
.collect(Collectors.toList()); // List<String[]>
尝试这个。 我希望它可以解决...
List<String> list = table.stream().filter(row -> !hash.containsKey(row[keyColumnNumber]))
.map(row -> row[keyColumnNumber])
.flatMap(x -> Arrays.stream(hash.get()))//<<-----------------
.collect(Collectors.toList());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.