Неизменяемая карта Java 11: создайте Map.Entry - PullRequest
2 голосов
/ 01 ноября 2019

В Java 11 есть набор статических методов в java.util.Map, которые позволяют создавать экземпляры AbstractImmutableMap:

static <K, V> Map<K, V> of(K k1, V v1) { return new Map1(k1, v1); }
static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2) { return new MapN(new Object[]{k1, v1, k2, v2}); }
// ... some more "vararg" static methods until 10 pairs (inclusive).

Есть также другой метод, который делает почти то же самое, за исключением того, что это правда -vararg:

static <K, V> Map<K, V> ofEntries(Map.Entry<? extends K, ? extends V>... entries) { /* impl here */ }

Я хочу использовать последний метод, поскольку он позволяет расширить количество записей далеко за десять. Проблема в том, что я не знаю, как создать Map.Entry. Он имеет много реализаций в различных Map s, но для него нет оператора new или статического метода фабрики, в то время как Map имеет его.

Map#ofEntries также используется внутри Map#copyOf, но я не могу найти способ использовать его без уже существующей реализации Map с некоторыми записями. : /

Я пытался найти его, но не смог найти ответ.

➥ Итак, мой вопрос: как предполагалось использовать Map#ofEntries? Или есть способ создания Map.Entry без написания собственной реализации или использования анонимных классов?

1 Ответ

6 голосов
/ 01 ноября 2019

Вы можете использовать метод static Map#entry для создания одного неизменяемого экземпляра Map.Entry:

Map<String, Integer> map = Map.ofEntries(Map.entry("One", 1), Map.entry("Two", 2));

Печать map может привести к следующемувывод:

{One=1, Two=2}
...