แมปกับ String ใน Java


89

เมื่อฉันทำSystem.out.println(map)ใน Java ฉันจะได้ผลลัพธ์ที่ดีใน stdout ฉันจะรับการแสดงสตริงเดียวกันนี้ของMapตัวแปรโดยไม่เข้าไปยุ่งกับเอาต์พุตมาตรฐานได้อย่างไร บางอย่างเช่นString mapAsString = Collections.toString(map)?

คำตอบ:


143

ใช้Object#toString().

String string = map.toString();

นั่นคือหลังจากทั้งหมดยังเป็นสิ่งที่System.out.println(object)ไม่อยู่ภายใต้หมวก AbstractMap#toString()รูปแบบสำหรับแผนที่อธิบายไว้ใน

ส่งกลับการแสดงสตริงของแผนที่นี้ การแทนค่าสตริงประกอบด้วยรายการการแมปคีย์ - ค่าตามลำดับที่ส่งคืนโดยตัวentrySetวนซ้ำของมุมมองของแผนที่ซึ่งอยู่ในวงเล็บปีกกา ("{}") การแมปที่อยู่ติดกันจะคั่นด้วยอักขระ "," (ลูกน้ำและช่องว่าง) การแมปคีย์ - ค่าแต่ละรายการจะแสดงผลเป็นคีย์ตามด้วยเครื่องหมายเท่ากับ ("=") ตามด้วยค่าที่เกี่ยวข้อง String.valueOf(Object)คีย์และค่าจะถูกแปลงเป็นสตริงโดย


3
การกด F3 บนเมธอด Map toString () ทำให้เข้าใจผิด! นำคุณตรงไปยัง Object.toString () - ควรคิดก่อนเข้าร่วม F3
อดัม

2
@Adam นั่นเป็นเพราะคุณเรียก toString () บนอินเทอร์เฟซซึ่งแน่นอนว่าวิธีนี้ไม่ได้กำหนดไว้ IDE ของคุณไม่ทราบเกี่ยวกับการใช้งานรันไทม์จริง คุณไม่ควรตำหนิเธอ
Victor Dombrovsky

@VictorDombrovsky IDE ที่มีครึ่งเดียว (เช่น IntelliJ, Eclipse และอื่น ๆ ) ควรสามารถติดตามการนำเมธอดไปใช้งานจริงที่กำหนดไว้ในอินเทอร์เฟซได้
นายท้าย

@wheeler toString()ไม่ได้ประกาศในMapและถ้าเป็น: Mapมี 21 คลาสที่ใช้งานได้ ข้อใดควรเป็นที่ต้องการมากกว่าตัวอื่น ๆ เมื่อการใช้งานจริงเป็นที่รู้จักในรันไทม์เท่านั้น
Gerold Broser

แต่ค่าคีย์จะไม่ถูกยกมาสองครั้งดังนั้นจึงไม่ใช่ JSON ที่ถูกต้องหากมีคนพยายามใช้เป็น JSON
P Satish Patro

11

คุณยังสามารถใช้ google-collections (guava) คลาส Joiner ได้หากต้องการปรับแต่งรูปแบบการพิมพ์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.