首页 > 解决方案 > 从文件中按 X 求平均值的方法。?

问题描述

假设我有一个 CSV 文件。

例如:

City,Year,Income Delhi,2001,12345 Mumbai,2001,43211 Hyderabad,2001,54322 Delhi,2002,76543 Mumbai,2002,43211 Hyderabad,2002,54322 Bangalore,2001,43211 Bangalore,2001,54322

我想按城市查找平均值。

输出:

Delhi - 876543 Mumbai - 86543 Hyderabad - 356785 Bangalore - 64352

我使用的方法是使用多个 Map。但我想它会占用更多空间。

谁能建议我更好的方法来解决这个问题?

谢谢

标签: javacsvhashmapaverage

解决方案


首先,我们定义一个 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)));

的keygroupResult是城市名,value是平均收入


推荐阅读