これは動作するはずです:ここでは
Map<String, Integer> map = animal.stream().collect(
Collectors.groupingBy(
Animal::getName,
Collectors.collectingAndThen(
Collectors.mapping(Animal::getColor, Collectors.toSet()),
Set::size)
)
);
いくつかのテストコード:
public static void main(String[] args) {
List<Animal> animal = new ArrayList<>();
animal.add(new Animal("Dog","black"));
animal.add(new Animal("Dog","black"));
animal.add(new Animal("Dog","blue"));
animal.add(new Animal("Cat","blue"));
animal.add(new Animal("Cat","white"));
Map<String, Integer> map = animal.stream().collect(
Collectors.groupingBy(
Animal::getName,
Collectors.collectingAndThen(
Collectors.mapping(Animal::getColor, Collectors.toSet()),
Set::size)
)
);
for(Entry<String, Integer> entry:map.entrySet()) {
System.out.println(entry.getKey()+ " : "+entry.getValue());
}
}
は
Cat : 2
Dog : 2
注:この答えは、このことにより、SOポスト触発されました:https://stackoverflow.com/a/30282943/1138523
あなたは、あなたがしたい場合は、テストコードのための地図::のforEachを使用することができます。map.forEach((キー、値) - >のSystem.out。 println(key + ":" + value)); – srborlongan
ありがとう、知らなかった –