作者:流浪1种无奈 | 来源:互联网 | 2023-09-18 09:31
所以我们假设我们在数组中有一个字符串:“randomText1randomText2”,它被加载到Stream中.现在我回顾一下这个流中的所有行,然后将每一行分成空格字符.
所以我们假设我们在数组中有一个字符串:“randomText1 randomText2”,它被加载到Stream中.
现在我回顾一下这个流中的所有行,然后将每一行分成空格字符.
strings .map(string -> string.split(" ")) .flatMap(Arrays::stream) .collect(new MyClass(string1, string2));
如何获取字符串的两边并从那里做任何我想要的东西?
从Oracle docs(Oracle doc link)我只能找到一些更难的案例,其中一个人将使用Map<>例如.但我无法使他们的解决方案适应我这个更简单的问题.
解决方法:
使用flatMap不适合这项工作.你显然想做的是
strings.map(string -> string.split(" ", 2))
.map(array -> new MyClass(array[0], array[1]))
您可以使用.collect(Collectors.toList())进一步处理流以获取List或.findAny()获取单个MyClass实例(如果有).
通常,只有当您想要统一处理所有元素时才流式传输数组,即如果它们的位置具有必须保留以用于后续操作的特殊含义则不会.
如果你真的想要创建一个平坦的单词或标记流,你不应该使用String.split和Arrays.stream的组合,因为它会创建并填充不必要的中间数组.在这种情况下使用
strings.flatMap(Pattern.compile(" ")::splitAsStream)
见Pattern.splitAsStream