Sto guardando i documenti per il IntStream
, e vedo un toArray
metodo, ma non c'è modo di andare direttamente a unList<Integer>
Sicuramente c'è un modo per convertire un Stream
in un List
?
Sto guardando i documenti per il IntStream
, e vedo un toArray
metodo, ma non c'è modo di andare direttamente a unList<Integer>
Sicuramente c'è un modo per convertire un Stream
in un List
?
Risposte:
IntStream::boxed
IntStream::boxed
trasforma a IntStream
in a Stream<Integer>
, che puoi quindi collect
in a List
:
theIntStream.boxed().collect(Collectors.toList())
Il boxed
metodo converte i int
valori primitivi di an IntStream
in un flusso di Integer
oggetti. La parola "boxe" indica il processo di conversione int
⬌ Integer
. Vedi Tutorial Oracle .
toList
. Questo viene fatto inserendo il seguente tra le importazioni del file: static import java.util.stream.Collectors.toList;
. Quindi la chiamata di raccolta legge solo .collect(toList())
.
Collectors
classe in Preferenze -> Java -> Editor -> Content Assist -> Preferiti . Dopo questo, devi solo digitare toLi
a colpo Ctr + Spazio per avere il riempimento IDE toList
e aggiungere l'importazione statica.
boxed()
parte
È inoltre possibile utilizzare mapToObj () su uno Stream, che accetta IntFunction e restituisce uno Stream a valore oggetto costituito dai risultati dell'applicazione della funzione data agli elementi di questo stream.
List<Integer> intList = myIntStream.mapToObj(i->i).collect(Collectors.toList());
boxed()
sta delegando.
È possibile utilizzare raccolte primitive disponibili nelle raccolte Eclipse ed evitare il pugilato.
MutableIntList list =
IntStream.range(1, 5)
.collect(IntArrayList::new, MutableIntList::add, MutableIntList::addAll);
Nota: sono un collaboratore delle raccolte Eclipse.
MutableIntList list = IntLists.mutable.withAll(IntStream.range(1, 5))
È possibile utilizzare il metodo di raccolta:
IntStream.of(1, 2, 3).collect(ArrayList::new, List::add, List::addAll);
In effetti, questo è quasi esattamente ciò che Java sta facendo quando si chiama .collect (Collectors.toList ()) su un flusso di oggetti:
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: il terzo parametro è richiesto solo se si desidera eseguire la raccolta parallela; per la raccolta sequenziale sono sufficienti solo i primi due.