Maison > Java > javaDidacticiel > Comment puis-je traduire efficacement des listes en cartes à l'aide de Java 8 Streams ?

Comment puis-je traduire efficacement des listes en cartes à l'aide de Java 8 Streams ?

DDD
Libérer: 2024-12-28 13:16:10
original
615 Les gens l'ont consulté

How Can I Efficiently Translate Lists to Maps Using Java 8 Streams?

Traduire efficacement des listes en cartes avec les flux Java 8

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;
}
Copier après la connexion

À 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();
        }

    });
}
Copier après la connexion

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);
}
Copier après la connexion

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 :

  • Une fonction d'extracteur de clé (une fonction qui récupère la clé de chaque élément)
  • Une fonction d'extracteur de valeur (une fonction qui récupère la valeur de chaque élément) element)

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()));
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal