Grouping by in Java 8 stream to custom class rathe

2019-09-21 12:23发布

问题:

I have a class A which has some fields.

Class A{
 String type;
 String x;
 String y;
}

Class B{
    String x;
    String y;

}

Let's say we have a list List<A>. By using Collectors.groupingBy() , is it possible to get output Map<String,List<B>> instead Map<String,List<A>> ? where key in the Map is type field in Class A.

回答1:

Of course - just chain a mapping() collector to the groupingBy() collector.

Map<String,List<B>> map =
    listA.stream()
         .collect(Collectors.groupingBy(A::getType,
                                        Collectors.mapping(a->new B(a.getX(),a.getY()),
                                                           Collectors.toList())));