So fügen Sie einem Stream ein einzelnes Element hinzu

So fügen Sie einem Stream ein einzelnes Element hinzu

1. Überblick

In diesem kurzen Artikel werden wir uns ansehen, wie manadd an element to a Java 8 Stream macht, was nicht so intuitiv ist wie das Hinzufügen eines Elements zu einer normalen Sammlung.

2. Vorbereiten

Wir können einem bestimmten Element leicht einStream voranstellen, indem wir die statischeStream.concat _ () _ -Methode aufrufen:

@Test
public void givenStream_whenPrependingObject_thenPrepended() {
    Stream anStream = Stream.of(1, 2, 3, 4, 5);

    Stream newStream = Stream.concat(Stream.of(99), anStream);

    assertEquals(newStream.findFirst().get(), (Integer) 99);
}

3. Anhängen

Um ein Element an das Ende vonStream, anzuhängen, müssen wir nur die Argumente invertieren.

Denken Sie daran, dassStreams can represent infinite sequences ist, sodass es Szenarien gibt, in denen Sie möglicherweise nie zu Ihrem neuen Element gelangen:

@Test
public void givenStream_whenAppendingObject_thenAppended() {
    Stream anStream = Stream.of("a", "b", "c", "d", "e");

    Stream newStream = Stream.concat(anStream, Stream.of("A"));

    List resultList = newStream.collect(Collectors.toList());

    assertEquals(resultList.get(resultList.size() - 1), "A");
}

4. Bei einem bestimmten Index

Diese Operation wird von derStream-API nicht vollständig unterstützt, da im WesentlichenStreams are not collections and do not recognize the concept of indexes.

Dazu müssen wirStream in eine Liste konvertieren, dann das Element einfügen und schließlichStream aus dieser neuen Liste abrufen.

Denken Sie daran, dass Sie dadurch das gewünschte Ergebnis erhalten, aber auchlose the laziness of a Stream because we need to consume it before inserting a new element.

Erstellen wir eine Dienstprogrammmethode für die schwere Arbeit:

public  Stream insertInStream(Stream stream, T elem, int index) {
    List result = stream.collect(Collectors.toList());
    result.add(index, elem);
    return result.stream();
}

Testen wir nun unseren Code, um sicherzustellen, dass alles wie erwartet funktioniert:

@Test
public void givenStream_whenInsertingObject_thenInserted() {
    Stream anStream = Stream.of(1.1, 2.2, 3.3);

    Stream newStream = insertInStream(anStream, 9.9, 3);

    List resultList = newStream.collect(Collectors.toList());

    assertEquals(resultList.get(3), (Double) 9.9);
}

5. Fazit

In diesem kurzen Artikel haben wir gesehen, wie Sie einemStream,ein einzelnes Element hinzufügen, sei es am Anfang, am Ende oder an einer bestimmten Position.

Beachten Sie, dass das Voranstellen eines Elements zwar für alleStream, funktioniert, das Hinzufügen am Ende oder an einem bestimmten Index jedoch nur für endliche Streams funktioniert.

Wie immer kann der vollständige Quellcodeover on Github gefunden werden.