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 ! Bonjour à 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 lambdaaction
pour 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éthodeforEach
fonctionne 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éekey
, 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ésultatvalue
de 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é key
existe 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 Map
dans 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.Map
Si la clékey
n'existe pas chez vous , ouvalue
pour cette clé elle est égale ,null
la méthode ajoute .Map
key-value
- Si la clé
Key
existe et qu'elle est là,value != null
la méthode la remplacevalue
par le résultat de l'exécution de la fonction passéeremappingFunction
. - S'il
remappingFunction
renvoienull
,key
il 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 paireMap
si 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é key
par 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 key
est oldValue
. Map.replaceAll(BiFunction<? super K, ? super V, ? extends V> function)
— remplace toutes les valeurs value
par 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 !
GO TO FULL VERSION