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
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.