我有温度班
class Temperature {
double minTemp;
double maxTemp;
String city;
String country;
}
我还有另外一个课程,可以维护温度
class Temperatures {
List<Temperature> temperatures;
}
我想使用流按国家(地区)名称对温度进行分组。
我想要的是
public Map<String, Temperatures> temperaturesByCountry()
但是我无法使用流获取“温度”作为地图值,我得到的是“温度列表”。
我的分组依据实施
Map<String, List<Temperature>> result = this.getTemperatures()
.stream()
.collect(Collectors.groupingBy(Temperature::getCountry));
我想获得Map<String, Temperatures>
而不是Map<String, List<Temperature>>
我该如何实现??
答案 0 :(得分:3)
假设您有构造函数Temperatures(List<Temperature> temperatures)
这应该可以解决问题:
Map<String, Temperatures> result =
this.getTemperatures()
.stream()
.collect(groupingBy(Temperature::getCountry,
collectingAndThen(toList(), Temperatures::new)));
答案 1 :(得分:1)
或者,您可以将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)));