web-dev-qa-db-fra.com

Conversion d'une collection en carte en la triant à l'aide de flux Java 8

J'ai une liste que j'ai besoin de trier et de convertir ensuite en une carte avec son identificateur de nom. 

Voici mon code:

Map<Long, String> map = new LinkedHashMap<>();
list.stream().sorted(Comparator.comparing(Building::getName)).forEach(b-> map.put(b.getId(), b.getName()));

Je pense que cela fera l'affaire mais je me demande si je peux éviter de créer LinkedHashMap ici et d'utiliser une programmation fonctionnelle sophistiquée pour faire le travail en une ligne.

15
Mohammad Adnan

Vous avez Collectors.toMap à cet effet:

Map<Long, String> map = 
    list.stream()
        .sorted(Comparator.comparing(Building::getName))
        .collect(Collectors.toMap(Building::getId,Building::getName));

Si vous voulez forcer l'implémentation de la carte qui sera instanciée, utilisez ceci:

Map<Long, String> map = 
    list.stream()
        .sorted(Comparator.comparing(Building::getName))
        .collect(Collectors.toMap(Building::getId,
                                  Building::getName,
                                  (v1,v2)->v1,
                                  LinkedHashMap::new));
42
Eran

Utilisez toMap() of Java.util.stream.Collectors

0
mushfek0001