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?
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));
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())));