Dans Java 8, une tâche courante consiste à convertir une liste d'objets en une carte à l'aide de flux et de lambdas. Ceci peut être réalisé de différentes manières, en fonction du comportement souhaité et de la disponibilité de bibliothèques tierces comme Guava.
Approche Java 7 et versions antérieures
Traditionnellement, le mappage une liste d'une carte impliquait une itération manuelle et une boucle manuscrite :
private Map<String, Choice> nameMap(List<Choice> choices) { final Map<String, Choice> hashMap = new HashMap<>(); for (final Choice choice : choices) { hashMap.put(choice.getName(), choice); } return hashMap; }
À base de goyave Solutions
Guava fournit une méthode pratique, Maps.uniqueIndex, pour générer des cartes à partir de listes basées sur un extracteur de clé spécifié.
Guava avec Java 7
private Map<String, Choice> nameMap(List<Choice> choices) { return Maps.uniqueIndex(choices, new Function<Choice, String>() { @Override public String apply(final Choice input) { return input.getName(); } }); }
Goyave avec Java 8 Lambdas
L'exploitation de Java 8 lambdas simplifie encore davantage le code :
private Map<String, Choice> nameMap(List<Choice> choices) { return Maps.uniqueIndex(choices, Choice::getName); }
Les collectionneurs à la rescousse
Les offres de classe Collectors de Java 8 une implémentation robuste pour mapper des listes sur des cartes. Le collecteur toMap prend deux arguments :
Dans ce cas, nous pouvons utiliser Choice::getName et Function.identity() pour récupérer la clé et la valeur, respectivement :
Map<String, Choice> result = choices.stream().collect(Collectors.toMap(Choice::getName, Function.identity()));
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!