2015-01-21 12 views
10

Powiedzmy, że mam zajęcia z psami. Wewnątrz mam mapę, a jedną z wartości jest Rasa.Strumień Java - Sortuj listę do listy dostępnych list

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

Chcę dostać mapę list

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

Korzystanie strumień zamiast iteracji go.
Jak mogę to zrobić?

Odpowiedz

25

Możesz to zrobić z funkcją groupingBy.

Zakładając, że wejście jest List<Dog>, i że człon wewnątrz klasy DogMap nazywa map i rasy są przechowywane do „Rasa” klucz:

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

Wielki odpowiedź powyżej mogą ulec dalszej poprawie za pomocą notacji programowania funkcjonalnego:

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