Sto guardando i documenti per il IntStream, e vedo un toArraymetodo, ma non c'è modo di andare direttamente a unList<Integer>
Sicuramente c'è un modo per convertire un Streamin un List?
Sto guardando i documenti per il IntStream, e vedo un toArraymetodo, ma non c'è modo di andare direttamente a unList<Integer>
Sicuramente c'è un modo per convertire un Streamin un List?
Risposte:
IntStream::boxedIntStream::boxedtrasforma a IntStreamin a Stream<Integer>, che puoi quindi collectin a List:
theIntStream.boxed().collect(Collectors.toList())
Il boxedmetodo converte i intvalori primitivi di an IntStreamin un flusso di Integeroggetti. 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()).
Collectorsclasse in Preferenze -> Java -> Editor -> Content Assist -> Preferiti . Dopo questo, devi solo digitare toLia colpo Ctr + Spazio per avere il riempimento IDE toListe 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.