Подход, чтобы найти Среднее по X из файла. - PullRequest
0 голосов
/ 31 марта 2020

Допустим, у меня есть файл 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

Подход, который я использовал, заключается в использовании нескольких карт. Но я думаю, это займет больше места.

Может кто-нибудь предложить мне лучший подход для решения этой проблемы?

Спасибо

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

Во-первых, мы определяем DTO для express данных в 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 - название города, а значение - средний доход

0 голосов
/ 31 марта 2020

Вы можете сделать это с парой переменных для каждого пола, mCount, mTotal, fCount, fTotal.

Считать CSV построчно, увеличивая mCount или fCount соответственно и добавив зарплату к mTotal или fTotal.

После того, как вы достигнете конца файла,

просто наберите mTotal/mCount и fTotal/fCount, чтобы получить средние.

...