我有以下类结构(给出的例子没有意义,我只是为了问题的目的而做的):
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
返回几乎所有我想要的东西,但我的 key 有问题。在 getCarManufacturerToCarsMap()
方法我想要一个manufacturer
对象作为键,但我什至不确定是否可以使用 groupingBy
.我能做什么,返回 Map<Manufacturer, List<CarDto>>
的 map ?
最佳答案
如果你真的想避免将映射键设置为 String
即 Map<String, List<CarDto>>
取而代之的是 Map<Manufacturer, List<CarDto>>
您可以按如下方式分组:
this.getCarDtos()
.stream()
.collect(Collectors.groupingBy(e -> e.getManufacturer()));
请注意,这需要您覆盖 equals
和 hashcode
Manufacturer
中的方法定义两个给定对象相等的类,如果它们具有相同的名称。
关于以对象为键的 Java 8 流分组对象字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53692720/