Como adicionar um único elemento a um fluxo
1. Visão geral
Neste artigo rápido, vamos dar uma olhada em comoadd an element to a Java 8 Stream, que não é tão intuitivo quanto adicionar um elemento a uma coleção normal.
2. Anexar
Podemos facilmente acrescentar um determinado elemento aStream invocando o método estáticoStream.concat _ () _:
@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. Anexar
Da mesma forma, para anexar um elemento ao final deStream,, precisamos apenas inverter os argumentos.
Lembre-se de queStreams can represent infinite sequences, portanto, há cenários em que você pode nunca chegar ao seu novo elemento:
@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. Em um índice específico
Esta operação não é totalmente suportada pela APIStream porque essencialmenteStreams are not collections and do not recognize the concept of indexes.
Então, para fazer isso, precisamos converterStream em uma lista, inserir o elemento e, finalmente, obter umStream dessa nova lista.
Lembre-se de que isso lhe dará o resultado desejado, mas você tambémlose the laziness of a Stream because we need to consume it before inserting a new element.
Vamos criar um método utilitário para fazer o trabalho pesado:
public Stream insertInStream(Stream stream, T elem, int index) {
List result = stream.collect(Collectors.toList());
result.add(index, elem);
return result.stream();
}
Agora, vamos testar nosso código para garantir que tudo esteja funcionando conforme o esperado:
@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. Conclusão
Neste breve artigo, vimos como adicionar um único elemento a umStream,, seja no início, no final ou em uma determinada posição.
Lembre-se de que, embora prefixar um elemento funcione para qualquerStream,, adicioná-lo ao final ou a um índice específico funciona apenas para fluxos finitos.
Como sempre, o código-fonte completo pode ser encontradoover on Github.