Java 9 - Miglioramenti all'API di flusso
I flussi sono stati introdotti in Java per aiutare gli sviluppatori a eseguire operazioni aggregate da una sequenza di oggetti. Con Java 9, vengono aggiunti pochi metodi in più per migliorare i flussi.
takeWhile (Predicate Interface)
Sintassi
default Stream<T> takeWhile(Predicate<? super T> predicate)
Il metodo takeWhile accetta tutti i valori finché il predicato non restituisce false. Restituisce, in caso di flusso ordinato, un flusso costituito dal prefisso più lungo di elementi presi da questo flusso che corrispondono al predicato dato.
Esempio
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);
}
}
Produzione
takeWhile metodo accetta tutti i valori a, be c, quindi una volta che la stringa è vuota, ha smesso di essere eseguito.
abc
dropWhile (Predicate Interface)
Sintassi
default Stream<T> dropWhile(Predicate<? super T> predicate)
Il metodo dropWhile elimina tutti i valori all'inizio finché il predicato non restituisce true. Restituisce, in caso di flusso ordinato, un flusso costituito dagli elementi rimanenti di questo flusso dopo aver eliminato il prefisso più lungo di elementi corrispondenti al predicato dato.
Esempio
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);
}
}
Produzione
drop Mentre il metodo elimina i valori a, bec, quindi una volta che la stringa è vuota, prende tutti i valori.
ef
ef
iterare
Sintassi
static <T> Stream<T> iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next)
Il metodo iterate ora ha il predicato hasNext come parametro che arresta il ciclo una volta che il predicato hasNext restituisce false.
Esempio
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);
}
}
Produzione
3
6
9
ofNullable
Sintassi
static <T> Stream<T> ofNullable(T t)
Il metodo ofNullable viene introdotto per prevenire NullPointerExceptions e per evitare controlli null per i flussi. Questo metodo restituisce un flusso sequenziale contenente un singolo elemento, se non nullo, altrimenti restituisce un flusso vuoto.
Esempio
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);
}
}
Produzione
1
0