java: nhận số lượng tất cả các khóa và giá trị riêng biệt trong Bản đồ <Chuỗi, Đặt <Chuỗi>> [trùng lặp]

Jan 26 2021

đầu vào: Bản đồ <Chuỗi, Tập hợp> bản đồ

ví dụ: map =

    {"a"=[], 
    "b"=["b", "1", "2", "4"]}

đầu ra mong đợi: 5 ("b" xuất hiện dưới dạng khóa và giá trị. nên được tính là một)

đây là những gì tôi đã cố gắng cho đến nay. Có cách nào tốt hơn để làm điều này?

    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());

Có thể phát trực tuyến trên entryset của bản đồ để đến đầu ra này không? Ngoài ra, việc tạo một bộ băm riêng có vẻ không cần thiết chỉ để đếm

Trả lời

1 Eran Jan 26 2021 at 15:20

Bạn có thể làm điều gì đó như sau:

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

tức là tạo một Stream<String>trong số mỗi mục của Map.