Java Portal | Программирование
12.7K subscribers
1.25K photos
104 videos
38 files
1.2K links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
Download Telegram
Какой будет результат выполнения кода?

{"name":"Laptop"}
{"name":"Laptop","price":50000}
{"price":50000}
{}
→ Ошибка компиляции

Примечание: по умолчанию при сериализации/десериализации Jackson опирается на спецификацию JavaBeans, то есть учитываются только методы getter и setter.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Продвинутый Map в Java (надо знать)

Если ты хоть раз делал Map<String, List<String>>, этот пост для тебя.

Признайся, все когда-то писали так:

Map<String, List<String>> userTags = new HashMap<>();
userTags.computeIfAbsent("user123", k -> new ArrayList<>()).add("premium");
userTags.computeIfAbsent("user123", k -> new ArrayList<>()).add("verified");


Или вообще вот так:

if (!userTags.containsKey("user123")) {
userTags.put("user123", new ArrayList<>());
}
userTags.get("user123").add("premium");


==> В Apache Commons Collections уже давно есть готовая штука: MultiValuedMap.

Что это такое

MultiValuedMap<K, V> это структура данных, которая позволяет хранить несколько значений на один ключ. По сути это Map<K, Collection<V>>, но с нормальным, удобным API.

MultiValuedMap<String, String> userTags = new ArrayListValuedHashMap<>();

userTags.put("user123", "premium");
userTags.put("user123", "verified");
userTags.put("user123", "early-adopter");

// Забрать все теги сразу
Collection<String> tags = userTags.get("user123");
// [premium, verified, early-adopter]


Никаких computeIfAbsent, никаких проверок на null. Просто работает.

Что умеет

- Добавление без боли:

multiMap.put("key", "value1");
multiMap.put("key", "value2"); // не затирает предыдущее значение


- Массовые операции:

multiMap.putAll("user456", Arrays.asList("admin", "moderator"));


- Проверка существования конкретной пары:

multiMap.containsMapping("user123", "premium"); // true/false


- Удаление конкретного значения у ключа:

multiMap.removeMapping("user123", "premium");


- Получить вообще все значения:

Collection<String> allTags = multiMap.values();
// все значения со всех ключей


Реализации

- ArrayListValuedHashMap<K, V> — значения хранятся в ArrayList, порядок сохраняется, дубликаты возможны
- HashSetValuedHashMap<K, V> — значения хранятся в HashSet, без дублей

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
5🔥5👀5👍2🤔1
Java Collections Framework

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2😁1