тл; д-р
Використовуйте 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під кришками.