你可以用一个小的辅助方法做类似的事情:Collectors.joining
String
static <T> Collector<T,List<T>,List<T>> intersperse(T delim) {
return Collector.of(ArrayList::new, (l,e)-> {
if(!l.isEmpty()) l.add(delim);
l.add(e);
}, (l,l2)-> {
if(!l.isEmpty()) l.add(delim);
l.addAll(l2);
return l;
});
然后你可以使用它类似于:Collectors.joining(delimiter)
List<Integer> l=Stream.of(1, 2, 3).collect(intersperse(0));
生产
[1, 0, 2, 0, 3]
请注意,由于保护这些操作的方式,这是线程安全的。collect
如果您不想收集到列表中,但插入分隔符作为中间流操作,则可以通过以下方式执行此操作:
Integer delimiter=0;
Stream.of(1, 2, 3)/** or any other stream source */
.map(Stream::of)
.reduce((x,y)->Stream.concat(x, Stream.concat(Stream.of(delimiter), y)))
.orElse(Stream.empty())
/* arbitrary stream operations may follow */