有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java Stream GroupingBy collect在自定义对象中

我有体温课

class Temperature {
    double minTemp;
    double maxTemp;
    String city;
    String country;
}

我还有一门课,可以收集温度

class Temperatures {
    List<Temperature> temperatures;
}

我想用溪流按countryName对温度进行分组

我想要的是

public Map<String, Temperatures> temperaturesByCountry()

但我不能用stream得到温度作为地图值,我得到的是温度列表

我的groupingBy实现如下

Map<String, List<Temperature>> result = this.getTemperatures()
                .stream()
                .collect(Collectors.groupingBy(Temperature::getCountry));

我想得到Map<String, Temperatures>而不是Map<String, List<Temperature>>

我怎样才能做到这一点


共 (2) 个答案

  1. # 1 楼答案

    假设你有构造函数Temperatures(List<Temperature> temperatures) 这应该可以做到:

    Map<String, Temperatures> result = 
           this.getTemperatures()
               .stream()
               .collect(groupingBy(Temperature::getCountry, 
                                   collectingAndThen(toList(), Temperatures::new)));
    
  2. # 2 楼答案

    或者,您可以将Map.forEach与现有信息组合为:

    Map<String, Temperatures> temperaturesByCountry = new HashMap<>();
    Map<String, List<Temperature>> result = this.getTemperatures()
            .stream()
            .collect(Collectors.groupingBy(Temperature::getCountry));
    result.forEach((k, v) -> temperaturesByCountry.put(k, new Temperatures(v)));