TGViewer
Библиотека джависта | Java, Spring, Maven, Hibernate Библиотека джависта | Java, Spring, Maven, Hibernate @javaproglib · 22K subscribers
Post #7828 2.6K
📈 Продвинутая Map, часть 2: два ключа вместо вложенности

Если вы хоть раз писали Map<String, Map<String, Integer>>, знаете, насколько быстро такая структура становится неудобной.
Например, продажи по городу и товару:


Map<String, Map<String, Integer>> sales = new HashMap<>();

sales.computeIfAbsent("Москва", k -> new HashMap<>())
.put("iPhone", 120);


А если нужно получить все города, где продавался iPhone? Придётся обходить вложенные Map.

🈶 В Guava для таких случаев есть Table<R, C, V> — структура с двумя ключами:


Table<String, String, Integer> sales = HashBasedTable.create();

sales.put("Москва", "iPhone", 120);
sales.put("Питер", "iPhone", 90);

sales.get("Москва", "iPhone"); // 120


❗️Главное преимущество — можно работать не только со строками, но и со столбцами:


sales.row("Москва");
// {iPhone=120}

sales.column("iPhone");
// {Москва=120, Питер=90}


Есть несколько реализаций под разные задачи:

→ HashBasedTable — hash-таблицы с предсказуемым порядком итерации
→ TreeBasedTable — отсортированные ключи
→ ArrayTable — строки и столбцы известны заранее
→ ImmutableTable — неизменяемая таблица

📌 Если данные естественно описываются парой «строка + столбец», Table может оказаться удобнее вложенных Map.

══════ Навигация ══════
ВакансииЗадачиСобесы

🐸 Библиотека джависта

#CoreJava
  • 👍 7
  • 🔥 4
  • ❤ 3
More from @javaproglib
  1. Sep 20, 2026🧠 Почему a.age() - b.age() может сломать сортировку Часто встречается такой Comparator: l…
  2. Sep 19, 2026🤯 Collectors.teeing — две агрегации в одном collect Нужно получить средний возраст и коли…
  3. Sep 18, 2026══════ Навигация ══════ Вакансии • Задачи • Собесы 🐸 Библиотека джависта
  4. Sep 17, 2026⚡️⚡️Joker 2026: что происходит с профессией разработчика Индустрия разработки проходит чер…
  5. Sep 17, 2026🧠 Что выведет код? ❤️ [1, 2, 3, 4] 🔥 [2, 4] 👍 [1, 3] 👾 ConcurrentModificationException…
  6. Sep 16, 2026🛠 computeIfAbsent — кэш и группировка без if Нужно положить значение в список по ключу. О…
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 →