как исправить статический универсальный метод, который получает массив объектов

#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. Я проверил, и на самом деле это так! Так что не обращайте внимания на мой комментарий выше.