如何向流中添加單個元素
1.概述
在這篇快速文章中,我們將看一下如何向Java 8 Stream
添加元素,這不像向普通集合中添加元素那樣直觀。
2.前置
我們可以很容易地在前面加上一個給定的元素的Stream
通過調用靜態Stream.
concat ()
方法:
@Test
public void givenStream_whenPrependingObject_thenPrepended() {
Stream<Integer> anStream = Stream.of(1, 2, 3, 4, 5);
Stream<Integer> newStream = Stream.concat(Stream.of(99), anStream);
assertEquals(newStream.findFirst().get(), (Integer) 99);
}
3.追加
同樣,要將元素附加到Stream,
的末尾Stream,
我們只需要反轉參數即可。
請記住, Streams
可以表示無限序列,因此在某些情況下可能永遠無法使用新元素:
@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
API並不完全支持此操作,因為從本質**Streams
不是集合,並且不能識別索引的概念**。
因此,為了做到這一點,我們需要將Stream
轉換為列表,然後插入元素,最後從該新列表中獲取Stream
。
請記住,這將為您提供所需的結果,但是您也將失去Stream
的惰性,因為我們需要在插入新元素之前先使用它。
讓我們創建一個實用程序方法來完成繁重的工作:
public <T> Stream<T> insertInStream(Stream<T> stream, T elem, int index) {
List<T> result = stream.collect(Collectors.toList());
result.add(index, elem);
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);
}
5.結論
在這篇簡短的文章中,我們已經了解瞭如何向Stream,
添加單個元素Stream,
無論它是在開頭,結尾還是在給定位置。
請記住,儘管在任何Stream,
前面都可以使用元素,但是將元素添加到末尾或在特定索引處僅適用於有限流。
與往常一樣,可以在Github上找到完整的源代碼。
0 條評論,你可以發表評論,我們會進行改進
