тл; д-р
Використовуйте Map.of…
методи у Java 9 та новіших версіях.
Map< String , String > animalSounds =
Map.of(
"dog" , "bark" , // key , value
"cat" , "meow" , // key , value
"bird" , "chirp" // key , value
)
;
Map.of
Java 9 додала низку Map.of
статичних методів для того, щоб робити саме те, що вам завгодно: Вмикайте незмінний Map
за допомогою буквального синтаксису .
Карта (колекція записів) є незмінною, тому ви не можете додавати або видаляти записи після інстанції. Також ключ і значення кожного запису незмінні, неможливо змінити. Дивіться у Javadoc інші правила, такі як заборонено використовувати NULL, не допускаються повторювані ключі, а порядок ітерації відображень довільний.
Давайте розглянемо ці методи, використовуючи деякі зразкові дані для карти дня тижня для людини, яка, як ми очікуємо, буде працювати в цей день.
Person alice = new Person( "Alice" );
Person bob = new Person( "Bob" );
Person carol = new Person( "Carol" );
Map.of()
Map.of
створює порожнє Map
. Немодифікується, тому ви не можете додавати записи. Ось приклад такої карти, порожній без записів.
Map < DayOfWeek, Person > dailyWorkerEmpty = Map.of();
dailyWorkerEmpty.toString (): {}
Map.of( … )
Map.of( k , v , k , v , …)
є декілька методів, які беруть від 1 до 10 пар ключових значень. Ось приклад двох записів.
Map < DayOfWeek, Person > weekendWorker =
Map.of(
DayOfWeek.SATURDAY , alice , // key , value
DayOfWeek.SUNDAY , bob // key , value
)
;
weekendWorker.toString (): {SUNDAY = Особа {name = 'Bob'}, SATURDAY = Особа {name = 'Alice'}}
Map.ofEntries( … )
Map.ofEntries( Map.Entry , … )
приймає будь-яку кількість об'єктів, що реалізують Map.Entry
інтерфейс. Java пов'язує два класи , що реалізують цей інтерфейс, один змінюваних, інші незмінний: AbstractMap.SimpleEntry
, AbstractMap.SimpleImmutableEntry
. Але конкретного класу нам не потрібно вказувати. Нам просто потрібно зателефонувати за Map.entry( k , v )
методом виклику , передати свій ключ і наше значення, і ми повернемо об'єкт Map.Entry
інтерфейсу, який реалізує якийсь клас .
Map < DayOfWeek, Person > weekdayWorker = Map.ofEntries(
Map.entry( DayOfWeek.MONDAY , alice ) , // Call to `Map.entry` method returns an object implementing `Map.Entry`.
Map.entry( DayOfWeek.TUESDAY , bob ) ,
Map.entry( DayOfWeek.WEDNESDAY , bob ) ,
Map.entry( DayOfWeek.THURSDAY , carol ) ,
Map.entry( DayOfWeek.FRIDAY , carol )
);
weekdayWorker.toString (): {WEDNESDAY = Людина {name = 'Bob'}, TUESDAY = Людина {name = 'Bob'}, ЧЕТВЕРЖЕННЯ = Особа {name = 'Carol'}, ПЕТЯЦЬ = Особа {name = 'Carol'} , ПОНЕДІЛК = Особа {name = 'Alice'}}
Map.copyOf
Java 10 додала метод Map.copyOf
. Передайте наявну карту, отримайте непорушну копію карти.
Примітки
Зауважте, що порядок ітератора карт, виготовлених через Map.of
, не гарантується. Записи мають довільний порядок. Не пишіть код на основі баченого замовлення, оскільки документація попереджає, що замовлення може бути змінено.
Зверніть увагу , що всі ці Map.of…
методи повертають Map
з невизначеного класу . Основи конкретного класу можуть навіть відрізнятися від однієї версії Java до іншої. Ця анонімність дозволяє Java вибирати з різних реалізацій, що б оптимально відповідало вашим конкретним даним. Наприклад, якщо ваші ключі надходять із enum , Java може використовувати EnumMap
під кришками.