tl; Dr.
Map.of…
Java 9 ve sonraki sürümlerinde yöntemleri kullanın .
Map< String , String > animalSounds =
Map.of(
"dog" , "bark" , // key , value
"cat" , "meow" , // key , value
"bird" , "chirp" // key , value
)
;
Map.of
Java 9 bir dizi ilave Map.of
statik yöntemlerle istediğiniz sadece ne yapmalı: örneğini değişmez bir Map
kullanarak değişmez sözdizimi .
Harita (bir girdi koleksiyonu) değiştirilemez, bu nedenle somutlaştırdıktan sonra giriş ekleyemez veya kaldıramazsınız. Ayrıca, her girişin anahtarı ve değeri değiştirilemez, değiştirilemez. NULL değerine izin verilmeyen, yinelenen anahtarlara izin verilmeyen ve eşlemlerin yineleme sırası gibi diğer kurallar için Javadoc'a bakın .
O gün çalışacağını düşündüğümüz bir kişiye haftanın günü haritası için bazı örnek verileri kullanarak bu yöntemlere bakalım.
Person alice = new Person( "Alice" );
Person bob = new Person( "Bob" );
Person carol = new Person( "Carol" );
Map.of()
Map.of
boş oluşturur Map
. Değiştirilemez, bu nedenle girdi ekleyemezsiniz. Aşağıda, girişsiz boş bir harita örneği verilmiştir.
Map < DayOfWeek, Person > dailyWorkerEmpty = Map.of();
dailyWorkerEmpty.toString (): {}
Map.of( … )
Map.of( k , v , k , v , …)
1 ila 10 anahtar / değer çifti alan birkaç yöntemdir. İşte iki girişin bir örneği.
Map < DayOfWeek, Person > weekendWorker =
Map.of(
DayOfWeek.SATURDAY , alice , // key , value
DayOfWeek.SUNDAY , bob // key , value
)
;
weekendWorker.toString (): {PAZAR = Kişi {name = 'Bob'}, CUMARTESİ = Kişi {name = 'Alice'}}
Map.ofEntries( … )
Map.ofEntries( Map.Entry , … )
Map.Entry
arabirimi uygulayan herhangi bir sayıda nesneyi alır . Java bu arabirimi uygulayan iki sınıfı bir araya getirir, biri değiştirilebilir, diğeri değişmez: AbstractMap.SimpleEntry
, AbstractMap.SimpleImmutableEntry
. Ancak somut bir sınıf belirtmemize gerek yok. Sadece Map.entry( k , v )
yöntemi çağırmamız , anahtarımızı ve değerimizi geçirmemiz gerekiyor ve bazı sınıf uygulama Map.Entry
arayüzünün bir nesnesini geri alıyoruz .
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 = Kişi {name = 'Bob'}, SALI = Kişi {name = 'Bob'}, PERŞEMBE = Kişi {name = 'Carol'}, CUMA = Kişi {name = 'Carol'} , PAZARTESİ = Kişi {name = 'Alice'}}
Map.copyOf
Java 10 yöntemi ekledi Map.copyOf
. Mevcut bir haritayı geçin, haritanın değişmez bir kopyasını geri alın.
notlar
Bildirim haritaların yineleyici sırası üretilen üzeri Map.of
olan değil garantili. Girişlerin keyfi bir sırası var. Belgeler siparişin değişebileceği konusunda uyardığı için, görülen sıraya göre kod yazmayın.
Bunların hepsi unutmayın Map.of…
yöntemlerin bir dönüş Map
ait belirtilmeyen bir sınıf . Temel beton sınıfı, Java'nın bir sürümünden diğerine bile değişebilir. Bu anonimlik, Java'nın verilerinize en uygun olanı olan çeşitli uygulamalar arasından seçim yapmasını sağlar. Örneğin, anahtarlarınız bir numaradan geliyorsa , Java EnumMap
kapakların altında bir kullanabilirsiniz .