0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>forEach() не единственный метод в Map, работающий с лямбда-функциями. Кроме него есть набор методов<em>compute</em>. Они позволяют вычислять значение динамически, базируясь на том, существует ли запрашиваемый ключ в коллекции или нет.</p>
1
<p>forEach() не единственный метод в Map, работающий с лямбда-функциями. Кроме него есть набор методов<em>compute</em>. Они позволяют вычислять значение динамически, базируясь на том, существует ли запрашиваемый ключ в коллекции или нет.</p>
2
<h2>compute()</h2>
2
<h2>compute()</h2>
3
<p>Метод compute() обновляет значение ключа в Map, на основе логики, заданной внутри лямбда-функции. Эта лямбда-функция получает на вход текущее значение ключа, выполняет с ним необходимые операции и возвращает новое значение.</p>
3
<p>Метод compute() обновляет значение ключа в Map, на основе логики, заданной внутри лямбда-функции. Эта лямбда-функция получает на вход текущее значение ключа, выполняет с ним необходимые операции и возвращает новое значение.</p>
4
<p>В примере выше, метод compute() вызывается для каждого слова из списка. Лямбда-функция принимает на вход ключ и значение, которое является количеством повторений слова в списке. Дальше в зависимости от того, первый ли раз встречается это слово или нет, изменяется количество повторений. Без compute() нам бы пришлось написать код похожий на этот:</p>
4
<p>В примере выше, метод compute() вызывается для каждого слова из списка. Лямбда-функция принимает на вход ключ и значение, которое является количеством повторений слова в списке. Дальше в зависимости от того, первый ли раз встречается это слово или нет, изменяется количество повторений. Без compute() нам бы пришлось написать код похожий на этот:</p>
5
<p>Здесь мы встречаемся с интересной особенностью сокращенной версии лямбда-функции. В примерах выше не прописан явно возврат, но он выполняется, иначе значение было бы невозможно использовать. Возврат в сокращенной версии лямбда-функции выполняется автоматически. Полная версия выглядела бы так:</p>
5
<p>Здесь мы встречаемся с интересной особенностью сокращенной версии лямбда-функции. В примерах выше не прописан явно возврат, но он выполняется, иначе значение было бы невозможно использовать. Возврат в сокращенной версии лямбда-функции выполняется автоматически. Полная версия выглядела бы так:</p>
6
<h2>computeIfAbsent()</h2>
6
<h2>computeIfAbsent()</h2>
7
<p>Метод computeIfAbsent() отличается от compute(), тем, что лямбда вызывается только в том случае, если ключа в коллекции до этого не было. С его помощью, например, реализуется кеш, специальное хранилище, которое хранит данные, полученные в результате выполнения тяжелой операции. Это позволяет экономить ресурсы на повторных запросах, которые проходят уже без вычисления.</p>
7
<p>Метод computeIfAbsent() отличается от compute(), тем, что лямбда вызывается только в том случае, если ключа в коллекции до этого не было. С его помощью, например, реализуется кеш, специальное хранилище, которое хранит данные, полученные в результате выполнения тяжелой операции. Это позволяет экономить ресурсы на повторных запросах, которые проходят уже без вычисления.</p>
8
<h2>computeIfPresent()</h2>
8
<h2>computeIfPresent()</h2>
9
<p>Метод computeIfPresent() отличается от compute() тем, что лямбда вызывается только в том случае, если ключ уже был добавлен в коллекцию. Ниже пример кода, который применяет скидку к товарам, находящимся внутри коллекции, без ручной проверки того, есть ли они там на самом деле:</p>
9
<p>Метод computeIfPresent() отличается от compute() тем, что лямбда вызывается только в том случае, если ключ уже был добавлен в коллекцию. Ниже пример кода, который применяет скидку к товарам, находящимся внутри коллекции, без ручной проверки того, есть ли они там на самом деле:</p>
10
10