0Pricing
Java Academy · Lezione

IntStream e LongStream

Evitare il boxing negli stream

IntStream e LongStream è una lezione Java Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Java Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Java Academy include 4 lezioni in totale.

Perché esistono gli stream primitivi

Stream<Integer> converte ogni elemento in un oggetto Integer tramite boxing. IntStream, LongStream e DoubleStream lavorano direttamente sui tipi primitivi per evitare il sovraccarico 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);
    }
}

Creare un IntStream

Usi IntStream.of per valori espliciti oppure Arrays.stream su 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 per numeri grandi

LongStream rispecchia IntStream, ma lavora con valori long, evitando l'overflow nelle somme grandi.

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);
    }
}

Operazioni terminali specializzate

Gli stream primitivi aggiungono metodi numerici che mancano agli stream di oggetti: sum, min, max, 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());
    }
}

Risultati OptionalInt

min e max restituiscono OptionalInt perché lo stream potrebbe essere vuoto. Usi getAsInt o 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 resta primitivo

map su un IntStream riceve un IntUnaryOperator e restituisce un altro IntStream, quindi non avviene alcun 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 sugli stream primitivi

filter riceve un IntPredicate e conserva i primitivi corrispondenti.

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 su IntStream

reduce combina progressivamente lo stream usando un IntBinaryOperator. Con un valore identità restituisce direttamente 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 sui primitivi

forEach riceve un IntConsumer, evitando nuovamente il 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));
    }
}

Raccogliere in un array

toArray restituisce un int[] primitivo, il corrispondente naturale di 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));
    }
}

Convertire tra Int e Long

IntStream.asLongStream amplia i primitivi a long senza 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);
    }
}

Verifica rapida

Qual è il motivo principale per usare IntStream invece di Stream<Integer>?

Riepilogo

Ha usato gli stream primitivi per evitare il boxing:

  • IntStream e LongStream contengono primitivi direttamente.
  • Aggiungono operazioni terminali numeriche: sum, min, max, average.
  • min e max restituiscono OptionalInt.
  • map, filter, reduce e toArray mantengono tutti il tipo primitivo.

Domande Frequenti

La lezione «IntStream e LongStream» è gratuita?

Sì — il testo completo di «IntStream e LongStream» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Java Academy, passa a CoddyKit PRO. Il corso Java Academy include 4 lezioni in totale.

Cosa imparerò in «IntStream e LongStream»?

Evitare il boxing negli stream Eserciti Java Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Java Academy?

Non è richiesta alcuna esperienza precedente. Java Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «IntStream e LongStream»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Java Academy?

Sì. Ogni lezione Java Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. IntStream e LongStream
  2. Operazioni di intervallo e aggregazione
  3. Conversione da e verso stream di oggetti
  4. Generazione di stream primitivi
← Torna a Java Academy