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]
đầ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
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
.