Java 9 - Melhorias na API de fluxo
Os fluxos foram introduzidos em Java para ajudar os desenvolvedores a realizar operações agregadas a partir de uma sequência de objetos. Com o Java 9, mais alguns métodos são adicionados para melhorar os fluxos.
takeWhile(Interface de predicado)
Sintaxe
default Stream<T> takeWhile(Predicate<? super T> predicate)
O método takeWhile recebe todos os valores até que o predicado retorne false. Ele retorna, no caso de fluxo ordenado, um fluxo que consiste no prefixo mais longo de elementos retirados desse fluxo que correspondem ao predicado fornecido.
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
takeWhile pega todos os valores a, b e c, então, uma vez que a string esteja vazia, ele parou de ser executado.
abc
dropWhile(Interface de Predicado)
Sintaxe
default Stream<T> dropWhile(Predicate<? super T> predicate)
O método dropWhile descarta todos os valores no início até que o predicado retorne true. Ele retorna, no caso de fluxo ordenado, um fluxo que consiste nos elementos restantes desse fluxo após eliminar o prefixo mais longo dos elementos correspondentes ao predicado fornecido.
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
O método dropWhile descarta os valores a, b e c, então, uma vez que a string esteja vazia, ele recebe todos os valores.
ef ef
iterar
Sintaxe
static <T> Stream<T> iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next)
iterate agora tem o predicado hasNext como parâmetro que interrompe o loop quando o predicado hasNext retorna falso.
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
de Nullable
Sintaxe
static <T> Stream<T> ofNullable(T t)
O método ofNullable é introduzido para evitar NullPointerExceptions e para evitar verificações nulas para fluxos. Esse método retorna um Stream sequencial contendo um único elemento, se não for nulo, caso contrário, retorna um 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); count = Stream.ofNullable(null).count(); System.out.println(count); } }
Saída
1 0
Java