Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник Java

Map.merge()

Добавляет значение по ключу или объединяет его с уже существующим.

Доступно с: Java 8

Синтаксис

default V merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction)

Параметры

ПараметрТипОписание
keyKКлюч.
valueVЗначение, если ключа нет, и второй аргумент функции, если есть.
remappingFunctionBiFunction<? super V, ? super V, ? extends V>Объединяет старое и новое значение; результат `null` удаляет ключ.

Возвращаемое значение

VНовое значение ключа или `null`, если ключ удалён.

Примеры

Подсчёт повторов:

void main() {
    Map<String, Integer> counts = new TreeMap<>();
    for (String fruit : List.of("apple", "pear", "apple", "kiwi", "apple")) {
        counts.merge(fruit, 1, Integer::sum);
    }
    IO.println(counts);
}

Результат:

{apple=3, kiwi=1, pear=1}

Сумма продаж по менеджерам:

void main() {
    record Sale(String who, double amount) {}
    var sales = List.of(new Sale("Anna", 120.5), new Sale("Oleg", 80), new Sale("Anna", 30));
    Map<String, Double> totals = new TreeMap<>();
    for (Sale s : sales) {
        totals.merge(s.who(), s.amount(), Double::sum);
    }
    IO.println(totals);
}

Результат:

{Anna=150.5, Oleg=80.0}

Примечания

Если ключа нет, записывается value; если есть — результат функции от старого и нового значения. Это самый короткий способ вести счётчики и суммы. Функция, вернувшая null, удаляет ключ.

См. также

  • Map.getOrDefault() — Возвращает значение по ключу или запасное значение, если ключа нет.
  • Map.computeIfAbsent() — Возвращает значение по ключу, создавая его функцией, если ключа нет.
  • Collectors.counting() — Сборщик-счётчик; обычно используется внутри `groupingBy()`.

Вопросы и ответы по теме

В учебнике

  • Словари: Map и HashMap — Словари Map в Java: пары ключ — значение, put и get, getOrDefault, подсчёт с merge, TreeMap и LinkedHashMap.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.