java: รับจำนวนคีย์และค่าที่แตกต่างกันทั้งหมดใน Map <String, Set <String>> [duplicate]

Jan 26 2021

อินพุต: แผนที่ <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 Jan 26 2021 at 15:20

คุณสามารถทำสิ่งนี้:

Set<String> o = m1.entrySet()
                  .stream()
                  .flatMap(e -> Stream.concat(Stream.of(e.getKey()),e.getValue().stream()))
                  .collect(Collectors.toSet());

เช่นสร้างStream<String>รายการแต่ละรายการของไฟล์Map.