1. 前言
在本文中,我们将学习如何添加一个元素到Java8的Stream中。
2. 在头部添加元素
通过调用Stream.concat()
方法,我们很容易的实现在Stream的头部添加一个元素:
@Test
public void givenStream_whenPrependingObject_thenPrepended() {
Stream<Integer> anStream = Stream.of(1, 2, 3, 4, 5);
// 在anStream前面添加99
Stream<Integer> newStream = Stream.concat(Stream.of(99), anStream);
assertEquals(newStream.findFirst().get(), (Integer) 99);
}
3. 在Stream的末尾添加元素
类似地,我们反转调用Stream.concat()
方法时传入的参数即可实现在Stream的末尾添加元素:
@Test
public void givenStream_whenAppendingObject_thenAppended() {
Stream<String> anStream = Stream.of("a", "b", "c", "d", "e");
Stream<String> newStream = Stream.concat(anStream, Stream.of("A"));
List<String> resultList = newStream.collect(Collectors.toList());
assertEquals(resultList.get(resultList.size() - 1), "A");
}
4. 在特定位置插入元素
为了实现在特定位置插入元素,我们需要先把Stream转为List,把元素插入List之后,再把List转回Stream:
public <T> Stream<T> insertInStream(Stream<T> stream, T elem, int index) {
// Stream转List
List<T> result = stream.collect(Collectors.toList());
// 插入元素
result.add(index, elem);
// List转Stream
return result.stream();
}
使用方法:
@Test
public void givenStream_whenInsertingObject_thenInserted() {
Stream<Double> anStream = Stream.of(1.1, 2.2, 3.3);
Stream<Double> newStream = insertInStream(anStream, 9.9, 3);
List<Double> resultList = newStream.collect(Collectors.toList());
assertEquals(resultList.get(3), (Double) 9.9);
}