假设我有一个CSV文件。
例如:City,Year,IncomeDelhi,2001,12345Mumbai,2001,43211Hyderabad,2001,54322Delhi,2002,76543Mumbai,2002,43211Hyderabad,2002,54322Bangalore,2001,43211Bangalore,2001,54322
我想按城市查找平均值。
输出:Delhi - 876543Mumbai - 86543Hyderabad - 356785Bangalore - 64352
我使用的方法是使用多个Map。但是我想它将占用更多空间。
谁能建议我一个更好的方法来解决这个问题?
谢谢
最佳答案
首先,我们定义一个DTO以CSV文件表示数据,一行一行DTO
public class CityIncome {
private String city;
private String year;
private int income;
public CityIncome(String city, String year, int income) {
this.city = city;
this.year = year;
this.income = income;
}
}
其次,将CSV文件中的所有数据读入
List<CityIncome>
第三,使用Java Stream API分组并减少结果,可能是这样的:
Map<String, Double> groupResult = cityIncomes.stream()
.collect(Collectors.groupingBy(CityIncome::getCity, Collectors.averagingInt(CityIncome::getIncome)));
groupResult
的键是城市名称,值是平均收入