J'ai la structure suivante des classes (exemple donné n'a pas de sens, je l'ai fait juste pour les fins de question):
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
}
}
Dans le scénario donné, groupingBy
retourne presque tout ce que je veux, mais j'ai avec la clé un problème. En getCarManufacturerToCarsMap()
méthode que je voudrais avoir un manufacturer
objet comme une clé , mais je ne suis même pas sûr si cela est possible à l' aide groupingBy
. Que puis - je faire pour retourner une carte de Map<Manufacturer, List<CarDto>>
?
Si vous voulez vraiment éviter d' avoir la clé de carte comme par String
exemple Map<String, List<CarDto>>
et ont plutôt un , Map<Manufacturer, List<CarDto>>
vous pouvez regrouper par ce qui suit:
this.getCarDtos()
.stream()
.collect(Collectors.groupingBy(e -> e.getManufacturer()));
Notez que cela vous obligera à passer outre equals
et hashcode
méthode dans votre Manufacturer
classe de définition que deux objets donnés sont égaux si elles ont le même nom.