本文介绍了使用分隔符插入流中的元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
有没有一种好的方法来使用Java流以相同类型的分隔符插入流中的元素?
Is there a nice way to use Java streams to interleave elements in a stream with a separator of the same type?
// Expected result in is list: [1, 0, 2, 0, 3]
List<Integer> is = Stream.of(1, 2, 3).intersperse(0).collect(toList());
我已经看到许多关于如何以类似方式连接字符串的示例,但是没有找到任何针对常规列表的解决方案.
I have seen many examples of how to join strings in a similar way but have not found any solutions for general lists.
推荐答案
您可以使用flatMap进行此操作,但是在最后一个元素之后会得到一个附加的分隔符:
You can do it with flatMap, but you'll get an additional separator after the last element :
List<Integer> is = IntStream.of(1, 2, 3)
.flatMap(i -> IntStream.of(i, 0))
.collect(toList());
这是另一种方式,没有结尾的分隔符:
Here's another way, without the trailing separator :
List<Integer> is = IntStream.of(1, 2, 3)
.flatMap(i -> IntStream.of(0, i))
.skip(1)
.collect(toList());
这次,我们在每个原始元素之前添加分隔符,并摆脱了前面的分隔符.
This time we add the separator before each original element, and get rid of the leading separator.
这篇关于使用分隔符插入流中的元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!