web-dev-qa-db-fra.com

Java 8 liste de groupes lambdas dans la carte

Je veux prendre un List<Pojo> Et return un Map<String, List<Pojo>> Où la clé de Map est une valeur de String dans Pojo , appelons-le String key.

Pour clarifier, étant donné ce qui suit:

Pojo 1: Clé: une valeur: 1

Pojo 2: Clé: une valeur: 2

Pojo 3: Clé: valeur b: 3

Pojo 4: Clé: valeur b: 4

Je veux un Map<String, List<Pojo>> Avec keySet() de taille 2, où la touche "a" a Pojos 1 et 2, et la touche "b" a pojos 3 et 4.

Comment pourrais-je mieux y parvenir en utilisant Java 8 lambdas?

31
Robert Bain

Il semble que la simple variante groupingBy soit ce dont vous avez besoin:

Map<String, List<Pojo>> map = pojos.stream().collect(Collectors.groupingBy(Pojo::getKey));
64
Eran

De plus, si vous vouliez retourner une carte similaire mais au lieu de Pojo entier, vous vouliez que les valeurs de la carte soient une propriété du Pojo, vous feriez comme ceci:

Map<String, List<String>> map = pojos.stream()
            .collect(
                    Collectors.groupingBy(
                            Employee::getKey, Collectors.mapping(
                                    Pojo::getSomeStringProperty, Collectors.toList())));
22
cristianoms