本文介绍了使用分隔符插入流中的元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有一种好的方法来使用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.

这篇关于使用分隔符插入流中的元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-15 03:37