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
DDDoriginal
2024-12-28 13:16:10534parcourir

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;
}

À 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 :

  • 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()));

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:
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