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
520 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!

source:php.cn
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