flux Java 8 champ d'objet groupingBy avec un objet comme une clé

user3529850:

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é, groupingByretourne presque tout ce que je veux, mais j'ai avec la clé un problème. En getCarManufacturerToCarsMap()méthode que je voudrais avoir un manufacturerobjet 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>>?

Ousmane D. :

Si vous voulez vraiment éviter d' avoir la clé de carte comme par Stringexemple 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 equalset hashcodeméthode dans votre Manufacturerclasse de définition que deux objets donnés sont égaux si elles ont le même nom.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=186989&siteId=1
conseillé
Classement