Tôi đang cố gắng thu thập vào một ListMultiMap sử dụng java 8 mà không cần sử dụng thao tác forEach.Thu thập vào ListMultiMap của ổi bằng cách sử dụng Java 8 suối
Nếu tôi được viết mã trong Java 7, nó sẽ là một cái gì đó như thế này:
ListMultimap<String, String> result = ArrayListMultimap.create();
for(State state: states) {
for(City city: state.getCities()) {
result.put(state.getName(), city.getName());
}
}
Tôi tìm thấy trực tuyến một website rằng cuộc đàm phán về việc tạo nhà sưu tập của riêng bạn để sử dụng trong các tình huống như thế này. Tôi đã sử dụng cài đặt này cho trình thu thập. Sau đó tôi đã viết mã sau đây:
ListMultimap<String, String> result = states
.stream()
.flatMap(state -> state.getCities().stream()
.map(city -> {
return new Pair(state, city);
}))
.map(pair -> {
return new Pair(pair.first().getName(), pair.second().getName()));
})
.collect(MultiMapCollectors.listMultimap(
Pair::first,
Pair::second
)
);
Nhưng ở mức thu thập, tôi chỉ có thể chuyển một tham số và tôi có thể tìm cách chuyển hai tham số. Tiếp theo ví dụ từ trang web, tôi hiểu rằng để sử dụng cả hai, tôi cần phải lưu trữ một "cặp" trong Multimap như sau:
ArrayListMultimap<String, Pair> testMap = testObjectList.stream().collect(MultiMapCollectors.listMultimap((Pair p) -> p.first().getName()));
Tuy nhiên đây không phải là những gì tôi đang tìm kiếm, tôi muốn thu thập vào ListMultimap bằng cách sử dụng tên của tiểu bang và tên của thành phố bằng cách sử dụng bộ sưu tập của java 8 (và không có forEach).
Ai đó có thể giúp tôi với điều đó không? Cảm ơn bạn!
Mã phía sau liên kết đó trông không rõ ràng; Các loại thô, phôi được bỏ chọn và biến loại không cần thiết cho bộ tích lũy. –
Bạn đã đúng! Cảm ơn bạn đã chỉ ra rằng ! Tôi nghĩ rằng đó là âm thanh vì tôi đã tìm thấy rất nhiều trang web khác có triển khai tương tự. Cảm ơn bạn ! – codastic