Quelques améliorations ont été apportées pour compléter des manquements de java 8 dans le cadre d'utilisation des collections...
Les Streams avec JAVA 9
Quelques améliorations ont été apportées pour compléter des manquements de java 8 dans le cadre d'utilisation des collections...
Fonction takeWhile :
Permet de parcourir une collection en utilisant un prédicat, contrairement à limit takeWhile fonctionne comme une porte d'entrée ouvert qui va se fermer dès la condition est validée... après la porte est définitivement fermée.
List<Integer> numbers = Arrays.asList(1, 3, 8, 45, 89, 67, 83, 99, 100);
//
System.out.println("---> limit");
numbers.stream().limit(3).forEach(System.out::println);
numbers.streams.takeWhile(e -> e < 45).forEach(System.out::println);
Fonction dropWhile :
Permet de parcourir une collection en utilisant un prédicat, contrairement à skip dropWhile fonctionne comme une porte d’entrée fermé qui va s'ouvrir dès que la condition est validée... après la porte reste définitivement ouverte.
List<Integer> numbers = Arrays.asList(1, 3, 8, 45, 89, 67, 83, 99, 100);
//
System.out.println("---> Skip");
numbers.stream().skip(3).forEach(System.out::println);
numbers.stream().dropWhile(e -> e > 45).forEach(System.out::println);
Iterate
Permet d'itérer sur une collection, en précisant la valeur de départ, un prédicat, et un fonction d'incrémentation
iterate(seed; predicate; function)
// equivalent
for(int i 0; i < 10 ; i = i +2)
System.out.println(i);
Avec java 8, il n'y avait pas de prédicat pour arrêter la boucle.
Stream.iterate(1, count->count+2 ).forEach(System.out::println); // boucle infini
OfNullable()
Permet de renvoyer une interface Optionnals lorsque la value est null... cette méthode permet d'éviter les Nullpointer et éviter d'avoir à vérifier les null dans le code.
Stream.ofNullable(10).count(); // renvoie 1
Stream.ofNullable(null).count(); // renvoie une un Stream vide.
// Avec java 8
User user = getUserById(id);
Stream<Address> address= user== null? Stream.empty(): user.addresses();
// Avec Java 9
User user= getUserById(id);
Stream.ofNullable(user).flatMap(User::addresses) //=> renvoie une collection vide et evite les NullPointer