如何在java Stream中捕获splitted字符串

Kas*_*par 3 java java-8

所以我们假设我们在一个数组中有一个字符串:"randomText1 randomText2",它被加载到Stream中.

现在我回顾一下这个流中的所有行,然后将每一行分成空格字符.

strings
                        .map(string -> string.split(" "))
                        .flatMap(Arrays::stream)
                        .collect(new MyClass(string1, string2));
Run Code Online (Sandbox Code Playgroud)

如何获取字符串的两边并从那里做任何我想要的东西?

从Oracle文档(Oracle doc链接)我只能找到一些更难的情况,其中一个人将使用Map<>例如.但我无法使他们的解决方案适应我这个更简单的问题.

Hol*_*ger 13

使用flatMap不是工作的正确工具.你显然想做的是

strings.map(string -> string.split(" ", 2))
       .map(array  -> new MyClass(array[0], array[1]))
Run Code Online (Sandbox Code Playgroud)

您可以通过使用.collect(Collectors.toList())获取List<MyClass>.findAny()获取单个MyClass实例(如果有)来进一步处理流.

一般来说,流数组,如果你想均匀地处理所有元素,即是唯一有用的没有,如果他们的立场有其必须被保存为后续操作具有特殊意义.


而且,如果你真的想创造的词或令牌的扁平流,你不应该使用的组合String.split,并Arrays.stream为将创建并填写不必要的中间阵列.在这种情况下使用

strings.flatMap(Pattern.compile(" ")::splitAsStream)
Run Code Online (Sandbox Code Playgroud)

看到 Pattern.splitAsStream