Java 添加一个元素到Stream中

作者 | 2020年4月27日

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);
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注