我有以下类的结构(给出的例子是没有意义的,我只是为了问题目的而做的):
public class ManufacturerDto {
private String name;
private Boolean withConfirmation;
//getters and setters omitted for brevity
}
public class CarDto {
private ManufacturerDto manufacturer;
//getters and setters omitted for brevity
}
public abstract class VehicleDto {
private list<CarDto> cars = new ArrayList<>();
//getters and setters omitted for brevity
}
public class EuropeanMarketCarDto extends VehicleDto {
public Map<String, List<CarDto>> getCarManufacturerToCarsMap() {
return this.getCarDtos()
.stream()
.collect(Collectors.groupingBy(e -> e.manufacturer().getName()));
//getters and setters omitted for brevity
}
}
在给定的场景中, groupingBy
几乎可以返回我想要的所有内容,但是我的密钥有问题 . 在 getCarManufacturerToCarsMap()
方法中,我希望将 manufacturer
对象作为键,但我甚至不确定是否可以使用 groupingBy
. 我该怎么做才能返回 Map<Manufacturer, List<CarDto>>
的 Map ?
2 回答
如果您确实希望避免将 Map 密钥设为
String
,即Map<String, List<CarDto>>
而是拥有Map<Manufacturer, List<CarDto>>
,则可按以下方式分组:请注意,这将要求您在
Manufacturer
类中重写equals
和hashcode
方法,以定义两个给定对象具有相同名称的相等对象 .你可以尝试这样的事情:
因此,这将由它的制造商对所有汽车进行分组,输出将是这样的:
TOYOTA = [AURIS的AURIS params,AVIA的AVIA params],MERCEDES = [S500的S500 params ...]
EDIT 2
EDIT 3: