TGViewer
Java Ready | Программирование Java Ready | Программирование @java_ready · 9.24K subscribers
Post #2255 506
Знали, что Map.getOrDefault может вызвать загрузку, даже когда ключ уже есть?

Java сначала вычисляет аргументы метода, и только потом вызывает сам метод.

Поэтому дорогой вызов справа выполнится заранее:
User user = users.getOrDefault(id, loadUser(id));


Даже если users уже содержит id, loadUser(id) успеет выполниться. Если это запрос к базе, сеть или вычисление, приложение потратит время зря.

Для ленивого вычисления значения подойдёт computeIfAbsent:
User user = users.computeIfAbsent(id, this::loadUser);


Функция загрузки вызывается только тогда, когда ключ отсутствует или связан с null. Возвращённое ненулевое значение добавляется в map и дальше берётся из неё.

Проверь и семантику отсутствующего результата. Если загрузчик вернёт null, запись не появится, и следующий вызов снова попробует загрузить пользователя:
User user = users.computeIfAbsent(id, key -> findUser(key).orElse(null));


Ещё один нюанс касается конкурентного доступа. Для параллельных потоков выбирай подходящую concurrent map и не помещай в функцию долгую блокирующую работу без понимания гарантий конкретной реализации.

👉 Java Ready | #совет
  • 🔥 4
  • 👍 3
  • ❤ 2
More from @java_ready
  1. Oct 15, 2026⚡️ В сети начали массово сливать IT-курсы и книги известных онлайн школ Вот отсортированна…
  2. Oct 15, 2026Шпаргалка по загрузчикам классов в Java! На картинке показаны Bootstrap, Platform, Applica…
  3. Oct 14, 2026Почему equals у массивов в Java не сравнивает содержимое? В Java массив выглядит как конте…
  4. Oct 14, 2026🔴В 2025 году Россияне заработали 5,3 млрд рублей на арбитраже криптовалют По данным Минфи…
  5. Oct 14, 2026photo post
  6. Oct 13, 2026Почему нельзя просто проигнорировать InterruptedException? Поток может ждать завершения за…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →