web-dev-qa-db-ja.com

Java stream-リストをリストのハッシュマップにソートする

Dogクラスがあるとしましょう。

その中にはMap<String,String>があり、値の1つはBreedです。

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

MapsのListを取得したい:

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

繰り返しではなくStreamを使用したいと思います。

どうすればいいですか?

33
Bick

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")));
60
Eran

上記のすばらしい答えは、関数型プログラミング表記法を使用することでさらに改善できます。

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