#java #generics #static #hashmap
#java #общие сведения #статический #hashmap
Вопрос:
У меня проблема, связанная со статической функцией, которую я написал, которая получает универсальный массив объектов, содержащий ключ и значение. Когда он находит ключи с одинаковым значением, он добавляет значения для этого ключа; однако у меня возникают проблемы при создании статической функции. Код выглядит следующим образом:
public static<K,V extends Number> void mapSumOfValues(/*Map<K,V> h,*/ DataObject<K, V> []dataarray) {
Map<K,V> h = new HashMap<>();
Integer sum = 0;
for(DataObject<K,V> d: dataarray) {
h.merge(d.getKey(), d.getValue().intValue(), Integer:: sum);
}
Я получаю сообщение об ошибке:
Метод merge(K, V, BiFunction) в сопоставлении типов неприменим для аргументов (K, int, Integer::sum)
Комментарии:
1. Привет, используйте V extends Integer или h.merge(d.getKey(), новое целое число (d.GetValue().intValue()), Целое число:: сумма);
Ответ №1:
Ваша функция слияния работает только для Integer
, поэтому вам нужен Map<K, Integer>
.
Map<K, Integer> h = new HashMap<>();
for (DataObject<K, V> d : dataarray) {
h.merge(d.getKey(), d.getValue().intValue(), Integer::sum);
}
Комментарии:
1. Вы уверены, что Integer::sum будет автоматически помещен в
BiFunction<Integer, Integer>
? Не говорю, что этого не произойдет, но я думаю, что это может быть проблематично.2. Я проверил, и на самом деле это так! Так что не обращайте внимания на мой комментарий выше.