Поток Java - сортировка списка в HashMap из списков

Допустим, у меня есть класс Dog.

Внутри него у меня есть Map<String,String> и одним из значений является Breed.

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

Я хочу получить Map List s:

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

Я бы предпочел использовать Stream а не повторять его.

Как мне это сделать?

Ответ 1

Вы можете сделать это с помощью groupingBy.

Предполагая, что вы вводите List<Dog>, член Map внутри класса Dog называется map, и Breed сохраняется для ключа "Breed":

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

Ответ 2

Отличный ответ, приведенный выше, может быть улучшен с помощью функциональной нотации программирования:

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