假设我有一个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的键是城市名称,值是平均收入

09-06 07:41