Java 9 Stream API Enhancements: takeWhile, dropWhile, iterate e ofNullable
Streams foram introduzidas no Java 8 para ajudar desenvolvedores a realizar operações agregadas a partir de uma sequência de objetos. No Java 9, mais alguns métodos foram adicionados para tornar streams melhores.
takeWhile(Predicate)
Sintaxe
default Stream<T> takeWhile(Predicate<? super T> predicate)
takeWhile pega todos os valores até o predicado retornar false. Retorna, no caso de stream ordenada, um stream consistindo do maior prefixo de elementos correspondentes ao predicado.
Exemplo
import java.util.stream.Stream;
public class Tester {
public static void main(String[] args) {
Stream.of("a","b","c","","e","f").takeWhile(s -> !s.isEmpty())
.forEach(System.out::print);
}
}
Saída
abc
takeWhile pega a, b, c; ao encontrar string vazia, para.
dropWhile(Predicate)
Sintaxe
default Stream<T> dropWhile(Predicate<? super T> predicate)
dropWhile descarta todos os valores no início até o predicado retornar true. Retorna, no caso de stream ordenada, um stream consistindo dos elementos restantes após descartar o maior prefixo correspondente ao predicado.
Exemplo
import java.util.stream.Stream;
public class Tester {
public static void main(String[] args) {
Stream.of("a","b","c","","e","f").dropWhile(s -> !s.isEmpty())
.forEach(System.out::print);
System.out.println();
Stream.of("a","b","c","","e","","f").dropWhile(s -> !s.isEmpty())
.forEach(System.out::print);
}
}
Saída
ef
ef
dropWhile descarta a, b, c; ao encontrar string vazia, pega o restante.
iterate
Sintaxe
static <T> Stream<T> iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next)
O método iterate agora tem parâmetro hasNext predicate que para o loop quando retorna false.
Exemplo
import java.util.stream.IntStream;
public class Tester {
public static void main(String[] args) {
IntStream.iterate(3, x -> x < 10, x -> x + 3).forEach(System.out::println);
}
}
Saída
3
6
9
ofNullable
Sintaxe
static <T> Stream<T> ofNullable(T t)
ofNullable evita NullPointerException e evita verificações de null para streams. Retorna stream sequencial contendo elemento único se não-nulo, caso contrário stream vazio.
Exemplo
import java.util.stream.Stream;
public class Tester {
public static void main(String[] args) {
long count = Stream.ofNullable(100).count();
System.out.println(count); // 1
count = Stream.ofNullable(null).count();
System.out.println(count); // 0
}
}
Saída
1
0
Esses métodos tornam a Stream API mais expressiva e segura para lidar com dados opcionais e condições de parada.
Java
- Dominando Operadores Java: Tipos, Sintaxe e Exemplos Práticos
- Comentários em Java: Tipos, Uso e Boas Práticas
- Dominando o Loop for Aprimorado em Java: Sintaxe, Exemplos e Boas Práticas
- Dominando Strings em Java: Criação, Métodos e Boas Práticas
- Dominando Interfaces em Java: Conceitos, Implementação e Boas Práticas
- Dominando Classes Internas Anônimas em Java: Definição, Sintaxe e Exemplos Práticos
- Dominando Try-With-Resources em Java: Gerenciamento Automático de Recursos Explicado
- Anotações em Java Explicadas: Tipos, Posicionamento e Exemplos Práticos
- Asserções em Java: Guia Prático para Detectar Bugs e Garantir Confiabilidade do Código
- Java 9 (JDK 9) – Principais Recursos e Benefícios