尝试编写一个简单的程序,用于打印 Java8 中输入数组中的唯一单词。例如,如果输入是
String[] input = {"This", "is", "This", "not"};
程序应输出 [T, h, i, s, n, o, t]
,元素的顺序应遵循输入中出现的相同模式。我的方法是分割
输入,然后map
、distinct
,最后收集
到List。但是下面的代码打印的是流列表而不是单词,我错过了什么?例如
String[] input = {"This", "is", "This", "not"};
System.out.println(Arrays.stream(input)
.map(word -> word.split(""))
.map(Arrays::stream)
.distinct()
.collect(toList()));
电流输出
[java.util.stream.ReferencePipeline$Head@548c4f57, java.util.stream.ReferencePipeline$Head@1218025c, java.util.stream.ReferencePipeline$Head@816f27d, java.util.stream.ReferencePipeline$Head@87aac27]
我有兴趣看看 Java8 中是否还有其他方法可以实现相同的目的。
最佳答案
您需要使用flatMap为了与流的内容进行映射。正如您注意到 Arrays::stream 生成单独的流,您想要的是将所有这些流展平为单个流,例如
System.out.println(Stream.of(input)
.map(w -> w.split(""))
.flatMap(Arrays::stream)
.distinct()
.collect(Collectors.toList()));
输出
[T, h, i, s, n, o, t]
关于Java 8 从数组中流式传输唯一字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27881627/