web-dev-qa-db-fra.com

Java stream - Trier une liste dans un HashMap de listes

Disons que j'ai une classe Dog.

A l'intérieur, j'ai un Map<String,String> et l'une des valeurs est Breed.

public class Dog {
    String id;
    ...
    public Map<String,String>
}

Je veux obtenir un Map de Lists:

HashMap<String, List<Dog>> // breed to a List<Dog>

Je préfère utiliser un Stream plutôt que de l'itérer.

Comment puis-je le faire?

33
Bick

Vous pouvez le faire avec groupingBy.

En supposant que votre entrée est un List<Dog>, le membre Map à l'intérieur de la classe Dog est appelé map et la race est stockée pour la clé "Breed":

List<Dog> dogs = ...
HashMap<String, List<Dog>> map = dogs.stream()
                                     .collect (Collectors.groupingBy(d -> d.map.get("Breed")));
60
Eran

La bonne réponse ci-dessus peut encore être améliorée en utilisant la notation de programmation fonctionnelle:

List<Dog> dogs = ...
HashMap<String, List<Dog>> map = dogs.stream()
     .collect(Collectors.groupingBy(Dog::getBreed)); 
31
Nestor Milyaev