Java Stream Grouping可以收集自定义对象

10 java grouping hashmap java-8 java-stream

我有温度等级

class Temperature {
    double minTemp;
    double maxTemp;
    String city;
    String country;
}
Run Code Online (Sandbox Code Playgroud)

我有另一个维护温度集合的类

class Temperatures {
    List<Temperature> temperatures;
}
Run Code Online (Sandbox Code Playgroud)

我想使用streams对countryName进行分组.

我想要的是

public Map<String, Temperatures> temperaturesByCountry()
Run Code Online (Sandbox Code Playgroud)

但我无法使用流将温度作为地图值,我得到的是温度列表.

我的分组实现如下

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

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

我怎样才能做到这一点.

ETO*_*ETO 5

假设你有构造函数,Temperatures(List<Temperature> temperatures) 这应该可以解决问题:

Map<String, Temperatures> result = 
       this.getTemperatures()
           .stream()
           .collect(groupingBy(Temperature::getCountry, 
                               collectingAndThen(toList(), Temperatures::new)));
Run Code Online (Sandbox Code Playgroud)