以对象为键的 Java 8 流分组对象字段

标签 java java-stream

我有以下类结构(给出的例子没有意义,我只是为了问题的目的而做的):

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 ?

最佳答案

如果你真的想避免将映射键设置为 StringMap<String, List<CarDto>>取而代之的是 Map<Manufacturer, List<CarDto>>您可以按如下方式分组:

this.getCarDtos()
      .stream()
      .collect(Collectors.groupingBy(e -> e.getManufacturer()));

请注意,这需要您覆盖 equalshashcode Manufacturer 中的方法定义两个给定对象相等的类,如果它们具有相同的名称。

关于以对象为键的 Java 8 流分组对象字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53692720/

相关文章:

Java 并行流 : how to wait for threads for a parallel stream to finish?

java - 将书签操作指定目标更改为页码

java - 调用方法

java - 如何使用流从 HashMap<E,R> 中提取 List<D>

Java 8 - 根据谓词递归删除文件夹

java - 使用 Java 8 Stream 打印修改后的列表值

Java 8 版本 - 带条件的列表映射

Java - 在两个字符串之间获取所有字符串的最佳方法? (正则表达式?)

java - java中复制文件的方法

java - 如何正确创建类 Ratio add(Ratio r)?