IntStream y LongStream
Evite el boxing en los streams
IntStream y LongStream es una lección gratuita de Java Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Java Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Java Academy incluye 4 lecciones en total.
Por qué existen los streams primitivos
Stream<Integer> convierte cada elemento en un objeto Integer mediante boxing. IntStream, LongStream y DoubleStream trabajan con primitivos sin envolver para evitar el coste adicional del boxing.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int sum = IntStream.of(1, 2, 3, 4).sum();
System.out.println(sum);
}
}Creación de un IntStream
Use IntStream.of para valores explícitos o Arrays.stream sobre un int[].
import java.util.Arrays;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int[] data = {10, 20, 30};
IntStream s = Arrays.stream(data);
System.out.println(s.max().getAsInt());
}
}LongStream para números grandes
LongStream funciona de forma similar a IntStream, pero trabaja con valores long y evita el desbordamiento en sumas grandes.
import java.util.stream.LongStream;
public class Main {
public static void main(String[] args) {
long total = LongStream.of(1_000_000_000L, 2_000_000_000L).sum();
System.out.println(total);
}
}Operaciones terminales especializadas
Los streams primitivos añaden métodos numéricos que no tienen los streams de objetos: sum, min, max y average.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
IntStream nums = IntStream.of(4, 8, 15, 16, 23, 42);
System.out.println(nums.average().getAsDouble());
}
}Resultados OptionalInt
min y max devuelven OptionalInt porque el stream podría estar vacío. Use getAsInt u orElse.
import java.util.OptionalInt;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
OptionalInt result = IntStream.empty().max();
System.out.println(result.orElse(-1));
}
}map sigue siendo primitivo
map sobre un IntStream recibe un IntUnaryOperator y devuelve otro IntStream, por lo que no se produce boxing.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int sumOfSquares = IntStream.of(1, 2, 3)
.map(n -> n * n)
.sum();
System.out.println(sumOfSquares);
}
}filter en streams primitivos
filter recibe un IntPredicate y conserva los primitivos que coinciden.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
long evens = IntStream.of(1, 2, 3, 4, 5, 6)
.filter(n -> n % 2 == 0)
.count();
System.out.println(evens);
}
}reduce en IntStream
reduce combina los elementos del stream mediante un IntBinaryOperator. Con un valor identidad, devuelve directamente un int.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int product = IntStream.rangeClosed(1, 5)
.reduce(1, (a, b) -> a * b);
System.out.println(product);
}
}forEach sobre primitivos
forEach recibe un IntConsumer, evitando de nuevo el boxing.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
IntStream.of(7, 8, 9).forEach(n -> System.out.println(n));
}
}Recopilación en un array
toArray devuelve un int[] primitivo, la correspondencia natural de un IntStream.
import java.util.Arrays;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int[] doubled = IntStream.of(1, 2, 3).map(n -> n * 2).toArray();
System.out.println(Arrays.toString(doubled));
}
}Conversión entre Int y Long
IntStream.asLongStream amplía los primitivos a long sin boxing.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
long sum = IntStream.of(1, 2, 3).asLongStream().sum();
System.out.println(sum);
}
}Comprobación rápida
¿Cuál es la razón principal para usar IntStream en lugar de Stream<Integer>?
Resumen
Usó streams primitivos para evitar el boxing:
IntStreamyLongStreamcontienen primitivos sin envolver.- Añaden operaciones terminales numéricas:
sum,min,maxyaverage. minymaxdevuelvenOptionalInt.map,filter,reduceytoArraysiguen trabajando con primitivos.
Preguntas frecuentes
¿La lección «IntStream y LongStream» es gratis?
Sí — el texto completo de «IntStream y LongStream» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Java Academy, actualiza a CoddyKit PRO. El curso de Java Academy incluye 4 lecciones en total.
¿Qué aprenderé en «IntStream y LongStream»?
Evite el boxing en los streams Practicas Java Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Java Academy?
No se requiere experiencia previa. Java Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «IntStream y LongStream»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Java Academy?
Sí. Cada lección de Java Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- IntStream y LongStream
- Operaciones de rango y agregación
- Mapeo hacia y desde streams de objetos
- Generación de streams de tipos primitivos