0Pricing
Java Academy · Aula

IntStream e LongStream

Evite o empacotamento em streams.

IntStream e LongStream é uma aula grátis de Java Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Java Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Java Academy inclui 4 aulas no total.

Por que existem fluxos de primitivas

Stream<Integer> empacota cada elemento em um objeto Integer. IntStream, LongStream e DoubleStream trabalham diretamente com tipos primitivos para evitar o custo do empacotamento.

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

Criando um IntStream

Use IntStream.of para valores explícitos ou Arrays.stream sobre um 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 é semelhante a IntStream, mas trabalha com valores long, evitando estouros em somas 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);
    }
}

Operações terminais especializadas

Os fluxos de primitivas adicionam métodos numéricos que faltam nos fluxos de objetos: sum, min, max e 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 e max retornam OptionalInt porque o fluxo pode estar vazio. Use getAsInt ou 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 permanece primitivo

map em um IntStream recebe um IntUnaryOperator e retorna outro IntStream, portanto não ocorre empacotamento.

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 em fluxos de primitivas

filter recebe um IntPredicate e mantém as primitivas correspondentes.

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

reduce acumula o fluxo usando um IntBinaryOperator. Com um valor de identidade, ele retorna diretamente um 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 primitivas

forEach recebe um IntConsumer, evitando novamente o empacotamento.

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

Coletando em um vetor

toArray retorna um int[] primitivo, o equivalente natural de um 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));
    }
}

Convertendo entre Int e Long

IntStream.asLongStream amplia as primitivas para long sem empacotamento.

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ção rápida

Qual é o principal motivo para usar IntStream em vez de Stream<Integer>?

Recapitulação

Você usou fluxos de primitivas para evitar o empacotamento:

  • IntStream e LongStream contêm primitivas diretamente.
  • Eles adicionam operações terminais numéricas: sum, min, max e average.
  • min e max retornam OptionalInt.
  • map, filter, reduce e toArray permanecem no domínio primitivo.

Perguntas Frequentes

A aula “IntStream e LongStream” é grátis?

Sim — o texto completo de “IntStream e LongStream” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Java Academy, atualize para CoddyKit PRO. O curso de Java Academy inclui 4 aulas no total.

O que vou aprender em “IntStream e LongStream”?

Evite o empacotamento em streams. Você pratica Java Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Java Academy?

Nenhuma experiência prévia é necessária. Java Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “IntStream e LongStream”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Java Academy?

Sim. Cada aula de Java Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. IntStream e LongStream
  2. Operações de intervalo e agregação
  3. Mapeando para e de streams de objetos
  4. Gerando streams de tipos primitivos
← Voltar para Java Academy