Estoy mirando los documentos para el IntStream
, y veo un toArray
método, pero no hay forma de ir directamente a unList<Integer>
¿Seguramente hay una manera de convertir Stream
a a List
?
Estoy mirando los documentos para el IntStream
, y veo un toArray
método, pero no hay forma de ir directamente a unList<Integer>
¿Seguramente hay una manera de convertir Stream
a a List
?
Respuestas:
IntStream::boxed
IntStream::boxed
convierte un IntStream
a Stream<Integer>
, que luego puedes collect
convertir en un List
:
theIntStream.boxed().collect(Collectors.toList())
El boxed
método convierte los int
valores primitivos de an IntStream
en un flujo de Integer
objetos. La palabra "boxeo" nombra el proceso de conversión int
⬌ Integer
. Vea el tutorial de Oracle .
toList
. Esto se realiza mediante la colocación de la siguiente entre las importaciones del archivo: static import java.util.stream.Collectors.toList;
. Entonces la llamada por cobrar se lee solo .collect(toList())
.
Collectors
clase en Preferencias -> Java -> Editor -> Content Assist -> Favoritos . Después de esto, solo tiene que escribir toLi
al presionar Ctr + Espacio para que el IDE se complete toList
y agregue la importación estática.
boxed()
papel
También puede usar mapToObj () en una secuencia, que toma una IntFunción y devuelve una secuencia con valor de objeto que consiste en los resultados de aplicar la función dada a los elementos de esta secuencia.
List<Integer> intList = myIntStream.mapToObj(i->i).collect(Collectors.toList());
boxed()
se delega.
Puede usar colecciones primitivas disponibles en Eclipse Collections y evitar el boxeo.
MutableIntList list =
IntStream.range(1, 5)
.collect(IntArrayList::new, MutableIntList::add, MutableIntList::addAll);
Nota: Soy colaborador de Eclipse Collections.
MutableIntList list = IntLists.mutable.withAll(IntStream.range(1, 5))
Puedes usar el método de recolección:
IntStream.of(1, 2, 3).collect(ArrayList::new, List::add, List::addAll);
De hecho, esto es casi exactamente lo que hace Java cuando llama a .collect (Collectors.toList ()) en una secuencia 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: El tercer parámetro solo es necesario si desea ejecutar la recopilación paralela; para una colección secuencial, bastará con los dos primeros.