java: รับจำนวนคีย์และค่าที่แตกต่างกันทั้งหมดใน Map <String, Set <String>> [duplicate]
อินพุต: แผนที่ <String, Set>
เช่น: map =
{"a"=[],
"b"=["b", "1", "2", "4"]}
ผลลัพธ์ที่คาดหวัง: 5 ("b" ปรากฏเป็นคีย์และค่าควรนับเป็นหนึ่ง)
นี่คือสิ่งที่ฉันได้ลองทำจนถึงตอนนี้ มีวิธีที่ดีกว่านี้ไหม
Set<String> o = new HashSet<String>();
o.addAll(m1.keySet());
o.addAll(m1.values().stream().flatMap(Collection::stream).collect(Collectors.toSet()));
System.out.println(o.size());
เป็นไปได้ไหมที่จะสตรีมบนชุดรายการของแผนที่เพื่อมาที่เอาต์พุตนี้ นอกจากนี้การสร้างแฮชเซ็ตแยกต่างหากก็ดูไม่จำเป็นเพียงเพื่อรับการนับ
คำตอบ
1 Eran
คุณสามารถทำสิ่งนี้:
Set<String> o = m1.entrySet()
.stream()
.flatMap(e -> Stream.concat(Stream.of(e.getKey()),e.getValue().stream()))
.collect(Collectors.toSet());
เช่นสร้างStream<String>
รายการแต่ละรายการของไฟล์Map
.