Estou olhando os documentos para o IntStream
e vejo um toArray
método, mas não há como ir diretamente para umList<Integer>
Certamente existe uma maneira de converter um Stream
para um List
?
Estou olhando os documentos para o IntStream
e vejo um toArray
método, mas não há como ir diretamente para umList<Integer>
Certamente existe uma maneira de converter um Stream
para um List
?
Respostas:
IntStream::boxed
IntStream::boxed
transforma um IntStream
em um Stream<Integer>
, que você pode collect
transformar em um List
:
theIntStream.boxed().collect(Collectors.toList())
O boxed
método converte os int
valores primitivos de um IntStream
em um fluxo de Integer
objetos. A palavra "boxe" nomes do int
⬌ Integer
processo de conversão. Consulte o Tutorial do Oracle .
toList
. Isso é feito colocando o seguinte entre as importações do arquivo: static import java.util.stream.Collectors.toList;
. Em seguida, a chamada a cobrar será exibida apenas .collect(toList())
.
Collectors
classe em Preferências -> Java -> Editor -> Assistente de Conteúdo -> Favoritos . Depois disso, você só precisa digitar toLi
no hit Ctr + Space para que o IDE preencha toList
e adicione a importação estática.
boxed()
parte
Você também pode usar o mapToObj () em um fluxo, que utiliza uma IntFunction e retorna um fluxo com valor de objeto que consiste nos resultados da aplicação da função fornecida aos elementos desse fluxo.
List<Integer> intList = myIntStream.mapToObj(i->i).collect(Collectors.toList());
boxed()
está delegando.
É possível usar coleções primitivas disponíveis nas Coleções Eclipse e evitar boxe.
MutableIntList list =
IntStream.range(1, 5)
.collect(IntArrayList::new, MutableIntList::add, MutableIntList::addAll);
Nota: Sou colaborador do Eclipse Collections.
MutableIntList list = IntLists.mutable.withAll(IntStream.range(1, 5))
Você pode usar o método de coleta:
IntStream.of(1, 2, 3).collect(ArrayList::new, List::add, List::addAll);
De fato, isso é quase exatamente o que Java está fazendo quando você chama .collect (Collectors.toList ()) em um fluxo de objetos:
public static <T> Collector<T, ?, List<T>> toList() {
return new Collectors.CollectorImpl(ArrayList::new, List::add, (var0, var1) -> {
var0.addAll(var1);
return var0;
}, CH_ID);
}
Nota: O terceiro parâmetro é necessário apenas se você deseja executar uma coleção paralela; para coleta seqüencial, fornecendo apenas os dois primeiros será suficiente.