Java 8 从数组中流式传输唯一字符

标签 java arrays functional-programming

尝试编写一个简单的程序,用于打印 Java8 中输入数组中的唯一单词。例如,如果输入是

   String[] input = {"This", "is", "This", "not"};

程序应输出 [T, h, i, s, n, o, t] ,元素的顺序应遵循输入中出现的相同模式。我的方法是分割输入,然后mapdistinct,最后收集到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/

相关文章:

Java 自定义序列化抛出 EOFException

Java XML 解析/查询

java - 在触摸坐标上创建 View ,但给出了错误的 x 和 y

reactjs - 如何更改 React Recharts 库 X 轴/Y 轴刻度的字体系列?

swift - 使用 ReactiveSwift 添加数字流

java - 如何制作(keyPressed)KeyListener?

javascript - 在另一个函数中返回一个函数的结果会产生错误的结果

c - 静态字符数组与通过套接字发送的另一个字符数组之间的“字符串”比较

php - 从所有输入元素获取 id 和 value 并通过 ajax 传递它们

F# - 没有参数的函数?