TL; DR
ใช้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
วิธีการแบบคงที่จะทำเพียงแค่สิ่งที่คุณต้องการ: instantiate ไม่เปลี่ยนรูป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'}, THURSDAY = บุคคล {name = 'Carol'}, FRIDAY = บุคคล {name = 'Carol'} , MONDAY = บุคคล {name = 'Alice'}}
Map.copyOf
Java 10 Map.copyOf
เพิ่มวิธีการ ผ่านแผนที่ที่มีอยู่กลับไปคัดลอกแผนที่ที่ไม่เปลี่ยนรูป
หมายเหตุ
ขอให้สังเกตว่าลำดับของตัววนซ้ำของแผนที่ที่ผลิตผ่านMap.of
คือไม่รับประกัน รายการมีคำสั่งโดยพลการ อย่าเขียนรหัสตามลำดับที่เห็นเนื่องจากเอกสารเตือนว่าคำสั่งนั้นอาจมีการเปลี่ยนแปลง
โปรดทราบว่าสิ่งเหล่านี้Map.of…
วิธีการกลับมาเป็นMap
ของชั้นเรียนที่ไม่ได้ระบุ คลาสคอนกรีตพื้นฐานอาจแตกต่างจาก Java เวอร์ชันหนึ่งไปอีกเวอร์ชันหนึ่ง การไม่เปิดเผยตัวตนนี้ช่วยให้ Java สามารถเลือกใช้งานได้หลากหลายไม่ว่าข้อมูลของคุณจะเหมาะสมที่สุด ตัวอย่างเช่นหากคีย์ของคุณมาจากenum , Java อาจใช้EnumMap
ภายใต้ฝาครอบ