0Pricing
Java Academy · Lección

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:

  • IntStream y LongStream contienen primitivos sin envolver.
  • Añaden operaciones terminales numéricas: sum, min, max y average.
  • min y max devuelven OptionalInt.
  • map, filter, reduce y toArray siguen 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

  1. IntStream y LongStream
  2. Operaciones de rango y agregación
  3. Mapeo hacia y desde streams de objetos
  4. Generación de streams de tipos primitivos
← Volver a Java Academy