JavaRush /Blog Java /Random-FR /Arrêtez les cycles d’écriture ! Top 10 des meilleures mét...

Arrêtez les cycles d’écriture ! Top 10 des meilleures méthodes pour travailler avec des collections de Java 8

Publié dans le groupe Random-FR
Je pense qu'il n'est pas nécessaire d'expliquer aux étudiants JavaRush ce que sont les collections et à quoi elles servent. Cependant, après la sortie de la 8ème version, de nombreuses opérations élémentaires, qui nécessitaient auparavant 6 à 7 lignes de code, ont été simplifiées au minimum. Sans plus tarder, voici le top 10 des meilleures techniques du Java8 Collections Framework qui vous feront gagner des tonnes de temps et d'espace ! Arrêtez les cycles d’écriture !  Top 10 des meilleures méthodes pour travailler avec des collections de Java 8 - 1Bonjour à tous, les amis ! L'habitude, comme vous le savez, est une seconde nature. Et m'étant habitué à l'écriture, for (int i = 0; i <......)je n'ai pas du tout envie de la réapprendre (d'autant plus que ce design est assez simple et compréhensible). Cependant, à l'intérieur des boucles, nous répétons souvent les mêmes opérations élémentaires, dont nous aimerions vraiment nous débarrasser de la répétition. Avec la sortie de Java8, Oracle a décidé de nous aider. Vous trouverez ci-dessous les 10 meilleures méthodes de collecte qui vous feront économiser beaucoup de temps et de code.

1. Iterable.forEach (action Consommateur <? super T>)

Le nom parle de lui-même. Parcourt la collection transmise et exécute une expression lambda actionpour chaque élément.
List <Integer> numbers = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7));
numbers.forEach(s -> System.out.print(s + " "));
1 2 3 4 5 6 7

2. Collection.removeIf (filtre Predicate<? super E>)

Rien de compliqué non plus. La méthode parcourt la collection et supprime les éléments qui correspondent à filter.
List <Integer> numbers = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7));
numbers.removeIf(s -> s > 5);
 numbers.forEach(s -> System.out.print(s + " "));
En une ligne, nous supprimons de la liste tous les nombres supérieurs à 5.

3. Map.forEach (action BiConsumer <? super K, ? super V>)

La méthode forEachfonctionne non seulement pour les classes qui implémentent l'interface Collection, mais aussi pour Map.
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");
books.forEach((a,b) -> System.out.println("Название книги: " + a + ". Author: " + b));
Название книги: Братья Карамазовы. Author: Федор Достоевский
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Властелин Колец. Author: Джон Толкин

4. Map.compute (clé K, BiFunction <? super K, ? super V, ? étend V> remappingFunction)

Cela a l'air un peu plus intimidant, mais en réalité c'est simple, comme tous les précédents. Pour la clé spécifiée key, cette méthode définit la valeur sur le résultat de la fonction remappingFunction. Par exemple:
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");
books.forEach((a,b) -> System.out.println("Название книги: " + a + ". Author: " + b));

books.compute("Философия Java", (a,b) -> b+", крутой чувак");
System.out.println("_______________________");
books.forEach((a,b) -> System.out.println("Название книги: " + a + ". Author: " + b));
Название книги: Братья Карамазовы. Author: Федор Достоевский
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Властелин Колец. Author: Джон Толкин
_______________________
Название книги: Братья Карамазовы. Author: Федор Достоевский
Название книги: Философия Java. Author: Брюс Эккель, крутой чувак
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Властелин Колец. Author: Джон Толкин
L'auteur de " Java Philosophy " est vraiment cool ! :)

5. Map.computeIfAbsent (clé K, fonction <? super K, ? extends V> mappingFunction)

La méthode ajoutera un nouvel élément à Map , mais seulement s'il n'y a aucun élément avec la même clé. Le résultat valuede l'exécution de la fonction lui sera attribué mappingFunction. Si un élément avec une telle clé existe déjà, il ne sera pas écrasé mais restera en place. Revenons à nos livres et essayons une nouvelle méthode :
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");

books.computeIfAbsent("Гарри Поттер и узник Азкабана", b -> getHarryPotterAuthor());
books.forEach((a,b) -> System.out.println("Название книги: " + a + ". Author: " + b));
Notre fonction mappingFunction:
public static String getHarryPotterAuthor() {
        return "Джоан Роулинг";
    }
Et voici le nouveau livre :
Название книги: Братья Карамазовы. Author: Федор Достоевский
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Гарри Поттер и узник Азкабана. Author: Джоан Роулинг
Название книги: Властелин Колец. Author: Джон Толкин

6. Map.computeIfPresent (clé K, BiFunction<? super K, ? super V, ? extends V> remappingFunction)

Même principe que , Map.compute()mais tous les calculs ne seront effectués que si l'élément avec la clé keyexiste déjà.
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");

books.computeIfPresent("Евгений Онегин", (a,b) -> b="Александр Пушкин");
System.out.println("_________________");
books.forEach((a,b) -> System.out.println("Название книги: " + a + ". Author: " + b));
books.computeIfPresent("Братья Карамазовы", (a,b) -> b="Александр Пушкин");
System.out.println("_________________");
books.forEach((a,b) -> System.out.println("Название книги: " + a + ". Author: " + b));
Lorsque la fonction a été appelée pour la première fois, aucun changement n'a eu lieu, car Mapdans le nôtre il n'y a pas de livre intitulé « Eugène Onéguine ». Mais pour la deuxième fois, le programme a changé l'auteur du livre « Les frères Karamazov » en « Alexandre Pouchkine ». Conclusion:
_________________
Название книги: Братья Карамазовы. Author: Федор Достоевский
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Властелин Колец. Author: Джон Толкин
_________________
Название книги: Братья Карамазовы. Author: Александр Пушкин
Название книги: Философия Java. Author: Брюс Эккель
Название книги: Преступление и наказание. Author: Федор Достоевский
Название книги: Война и мир. Author: Лев Толстой
Название книги: Властелин Колец. Author: Джон Толкин

7. Map.getOrDefault (clé d'objet, V valeur par défaut)

Renvoie la valeur correspondant à la clé key. Si une telle clé n'existe pas, renvoie la valeur par défaut.
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");

String igor = books.getOrDefault("Слово о полку Игореве", "Неизвестный автор");
System.out.println(igor);
Très confortablement :
Неизвестный автор

8. Map.merge (clé K, valeur V, BiFunction<? super V, ? super V, ? extends V> remappingFunction)

Je n'ai même pas essayé de calculer combien de lignes de code cette méthode vous fera économiser.
  • MapSi la clé keyn'existe pas chez vous , ou valuepour cette clé elle est égale , nullla méthode ajoute .Mapkey-value
  • Si la clé Keyexiste et qu'elle est là, value != nullla méthode la remplace valuepar le résultat de l'exécution de la fonction passée remappingFunction.
  • S'il remappingFunctionrenvoie null, keyil est supprimé de la collection.
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");

books.merge("Философия Java", "Брюс Эккель", (a, b) -> b +  " и кто-то там еще");
books.forEach((a,b) -> System.out.println("Название:" + a + ". Author: " + b));
Conclusion:
Название:Братья Карамазовы. Author: Федор Достоевский
Название:Философия Java. Author: Брюс Эккель и кто-то там еще
Название:Преступление и наказание. Author: Федор Достоевский
Название:Война и мир. Author: Лев Толстой
Название:Властелин Колец. Author: Джон Толкин
*désolé Bruce*

9. Map.putIfAbsent (clé K, valeur V)

Auparavant, pour ajouter une paire Mapsi elle n'était pas là, il fallait procéder comme suit :
Map <String, String> map = new HashMap<>();
if (map.get("Властелин Колец") == null)
    map.put("Властелин Колец", "Джон Толкин");
Maintenant, tout est devenu beaucoup plus simple :
Map<String, String> map = new HashMap<>();
map.putIfAbsent("Властелин Колец", "Джон Толкин");

10. Map.replace et Map.replaceAll()

Dernier sur la liste, mais non le moindre. Map.replace(K key, V newValue— remplace la valeur de la clé keypar newValue, si une telle clé existe. Sinon, rien ne se passe. Map.replace(K key, V oldValue, V newValue)- fait la même chose, mais seulement si la valeur actuelle keyest oldValue. Map.replaceAll(BiFunction<? super K, ? super V, ? extends V> function)— remplace toutes les valeurs valuepar le résultat de l'exécution de la fonction function. Par exemple:
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");

books.replace("Братья Карамазовы", "Брюс Эккель", "Джон Толкин");
books.forEach((a,b) -> System.out.println("Название:" + a + ". Author: " + b));
Название:Братья Карамазовы. Author: Федор Достоевский
Название:Философия Java. Author: Брюс Эккель
Название:Преступление и наказание. Author: Федор Достоевский
Название:Война и мир. Author: Лев Толстой
Название:Властелин Колец. Author: Джон Толкин
N'a pas fonctionné! La valeur actuelle de la clé des Frères Karamazov est Fiodor Dostoïevski, et non Bruce Eckel, donc rien n'a changé.
Map <String, String> books = new HashMap<>();
books.put("Война и мир", "Лев Толстой");
books.put("Преступление и наказание", "Федор Достоевский");
books.put("Философия Java", "Брюс Эккель");
books.put("Братья Карамазовы", "Федор Достоевский");
books.put("Властелин Колец", "Джон Толкин");

books.replaceAll((a,b) -> getCoolWriter());
books.forEach((a,b) -> System.out.println("Название:" + a + ". Author: " + b));
public static String getCoolWriter() {
        return "Крутой писатель";
    }
Название:Братья Карамазовы. Author: Крутой писатель
Название:Философия Java. Author: Крутой писатель
Название:Преступление и наказание. Author: Крутой писатель
Название:Война и мир. Author: Крутой писатель
Название:Властелин Колец. Author: Крутой писатель
Modifiez facilement les valeurs de la carte entière sans aucune construction complexe ! PS S'habituer à quelque chose de nouveau est toujours difficile, mais ces changements sont vraiment bons. En tout cas, certaines parties de mon code sont désormais nettement moins spaghetti qu'avant :) Si vous avez aimé l'article et que vous aimeriez en voir de nouveaux, n'oubliez pas de soutenir l'auteur dans le concours en cliquant sur "J'aime", ou mieux encore, « J'aime » :) Bonne chance dans vos études !
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION