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:
IntStreameLongStreamcontêm primitivas diretamente.- Eles adicionam operações terminais numéricas:
sum,min,maxeaverage. minemaxretornamOptionalInt.map,filter,reduceetoArraypermanecem 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
- IntStream e LongStream
- Operações de intervalo e agregação
- Mapeando para e de streams de objetos
- Gerando streams de tipos primitivos