У меня есть следующие методы, почти одинаковые и очень похожие:
public static Map<String, Long> countTotalCities(List<OrderData> orderDataList) {
return orderDataList.stream()
.collect(Collectors.groupingBy(
OrderData::getCity,
Collectors.counting()));
}
public static Map<String, Long> countTotalType(List<OrderData> orderDataList) {
return orderDataList.stream()
.collect(Collectors.groupingBy(
OrderData::getType,
Collectors.counting()));
}
public static Map<String, Long> countTotalChannels(List<OrderData> orderDataList) {
return orderDataList.stream()
.collect(Collectors.groupingBy(
OrderData::getChannel,
Collectors.counting()));
}
Методы getCity, getType и getChannel относятся к типу String. Есть ли способ поместить эти 3 метода в 1 метод и передать ему параметр String для простоты. Я хочу иметь 1 единственный метод вместо 3. Я даже подумал, что могу иметь одну и ту же карту для всех результатов. Я хочу сделать что-то вроде этого:
public static Map<String, Long> countTotalResults(List<OrderData> orderDataList, String field) {
return orderDataList.stream()
.collect(Collectors.groupingBy(field,Collectors.counting()));
}
Но при попытке сделать это получаю следующую ошибку компиляции: Collectors.groupingBy (field, ...)
Это Показанная ошибка: причина: не существует экземпляров переменных типа K, T, так что String соответствует Function
Я также хочу отсортировать эти результаты по OrderId. Не знаю, как указать этот порядок в Java 8.