поиск повторяющихся слов из файла
Сразу скажу сейчас еще изучаю Java и мне дали задачу. Суть задачи есть файл с данными о городах(айди, название, регион, население, первое упоминание), нужно вывести в консоль название региона и количество городов которые в нём есть( например Москва - 10). Оптимальным решением было посчитать не сумму городов, а количество повторений названия региона. данные о городах из файла заполнены в ArrayList.Изначально я перевёл List в массив, потом массив в hashMap и заполнил его названием городов и регионов и вывести этот список не проблема, а как посчитать так и не могу понять:(
public class Main {
public static void main(String[] args) {
List<City> cityList = ReadFile.parse();
City cityArray[] = cityList.toArray(new City[0]);
for (int i = 0; i < cityArray.length; ++i);
Map<String, String> regionAndCity = new HashMap<>();
for(int i = 0;i < cityArray.length; i++)
regionAndCity.put(cityArray[i].getName(), cityArray[i].getRegion());
for(Map.Entry<String,String> s : regionAndCity.entrySet())
System.out.println(s.getValue() + " " + s.getKey());
}
}
Ответы (1 шт):
Все слишком сложно. Бессмысленные циклы, бессмысленное созданием массива с городами из коллекции... Задача решается в одну строку кода (я вынес эту самую строку в отдельный метод). При этом считать можете по любому полю, за это отвечает второй параметр метода и сейчас это регион:
public static void main(String[] args) {
List<City> cityList = ReadFile.parse();
Map<String, Long> result = count(cityList, City::getRegion);
System.out.println(result);
}
private static Map<String, Long> count(List<City>cities, Function<City, String> identity) {
return cities.stream().collect(Collectors.groupingBy(identity, Collectors.counting()));
}