Maison >Java >javaDidacticiel >Comment puis-je convertir efficacement une liste Java en carte ?

Comment puis-je convertir efficacement une liste Java en carte ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-30 02:53:11515parcourir

How Can I Efficiently Convert a Java List to a Map?

Comment convertir une liste en carte en Java : approches optimales

La conversion d'une liste en carte en Java est une tâche courante qui peut être réalisé de différentes manières. Une approche consiste à parcourir la liste et à remplir une carte manuellement. Cependant, il existe des méthodes plus efficaces pour effectuer cette conversion à l'aide de la fonctionnalité Java intégrée.

Approche basée sur les flux (Java 8 ou version ultérieure)

Avec Java 8, l'API Stream fournit un moyen concis et performant de convertir une liste en carte. Cette approche utilise la méthode Collectors.toMap() :

Map<Integer, String> map = 
    list.stream().collect(Collectors.toMap(Item::getKey, item -> item));

Ici, la fonction lambda Item::getKey récupère la clé de chaque élément de la liste, tandis que l'élément -> item lambda récupère la valeur.

Approche manuelle à l'aide d'une boucle

Pour les versions pré-Java 8 ou si le streaming ne convient pas, une approche manuelle peut être utilisée :

List<Object[]> results;
Map<Integer, String> resultsMap = new HashMap<>();
for (Object[] o : results) {
    resultsMap.put((Integer) o[0], (String) o[1]);
}

Cette approche implique de parcourir la liste et d'extraire manuellement les paires clé et valeur, ce qui peut être moins efficace que l'approche basée sur le flux. approche.

Utilisation d'un opérateur binaire pour les fonctions non bijectives

Si la fonction de mappage n'est pas bijective (c'est-à-dire que plusieurs valeurs peuvent correspondre à la même clé), une L'opérateur binaire peut être utilisé pour fusionner les valeurs de clé en double. Par exemple, si nous voulons trouver la somme des valeurs pour chaque clé unique :

Map<String, Integer> map = 
    intList.stream().collect(toMap(i -> String.valueOf(i % 3), 
                                   i -> i, 
                                   Integer::sum));

Ici, l'opérateur binaire Integer::sum fournit la logique de fusion des valeurs de clé en double.

Conclusion

Bien que l'approche optimale pour convertir une liste en carte dépende des exigences spécifiques, l'utilisation de l'API Stream avec Collectors.toMap() est recommandé pour son efficacité et sa concision. L'approche manuelle peut être utilisée dans les anciennes versions de Java ou lorsque le streaming n'est pas applicable.

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