Adloun

programmation Java (école d'ingénieur) · Chapitre 12 · Exercice de TD

Inverser un dictionnaire

Collections et génériques · niveau 2

Énoncé

Un dictionnaire Map<String, String> associe à chaque personne sa ville. Écrire


static Map<String, List<String>> parVille(Map<String, String> villeDe)

qui renvoie, pour chaque ville, la liste des personnes qui y habitent, les villes étant triées. Pourquoi ne peut-on pas simplement inverser les couples dans une Map<String, String> ?

Corrigé


import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class Exo8Inverser {
    static Map<String, List<String>> parVille(Map<String, String> villeDe) {
        Map<String, List<String>> r = new TreeMap<>();
        for (Map.Entry<String, String> e : villeDe.entrySet()) {
            String ville = e.getValue();
            if (!r.containsKey(ville)) r.put(ville, new ArrayList<>());
            r.get(ville).add(e.getKey());
        }
        return r;
    }
    public static void main(String[] args) {
        Map<String, String> villeDe = new TreeMap<>();
        villeDe.put("Ada", "Lyon");
        villeDe.put("Hugo", "Paris");
        villeDe.put("Lina", "Lyon");
        villeDe.put("Sami", "Nantes");
        villeDe.put("Zoé", "Paris");
        System.out.println(parVille(villeDe));
    }
}

{Lyon=[Ada, Lina], Nantes=[Sami], Paris=[Hugo, Zoé]}

Plusieurs personnes peuvent habiter la même ville : dans une Map<String, String> inversée, la clé Lyon ne pourrait porter qu'un seul nom, et chaque put écraserait le précédent. Il faut donc une liste de noms par ville.

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →