- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
Tôi đang cố gắng hợp nhất Luồng
đối tượng và tất cả Luồng
Các phím trong được ánh xạ với nhau thành một bản đồ duy nhất.
例如,
Bản đồ cuối cùng someObject;
Danh sách cuối cùng<>>> list = someObject.entrySet()
.suối()
.flatMap(this::getInfoStream)
.collect(Collector.toList());
Chữ ký của getInfoStream là
public Stream<>>> getInfoStream(Map.Entry mục)
Nếu tôi sử dụng (Collectors.toList())
Tôi có thể lấy danh sách các đối tượng bản đồ này.
Nếu tôi sử dụng mã ở trên, đầu ra mẫu:
[{
"tên" : {
"thuộc tính:"giá trị"
}
},
{
"tên2" : {
"thuộc tính:"giá trị"
}
}]
Nhưng tôi muốn thu thập Bản đồ có cấu trúc
{
"tên" : {
"thuộc tính:"giá trị"
},
"tên2" : {
"thuộc tính:"giá trị"
}
}
Tiền đề là chìa khóa là duy nhất.
Làm cách nào tôi có thể thực hiện việc này bằng Collectors.toMap() hoặc bất kỳ giải pháp thay thế nào khác?
câu trả lời hay nhất
khi bạn có
Luồng>> luồng = ...
(Tôi cho rằng đó là .flatMap(this::getInfoStream)
kết quả) bạn có thể gọi
.flatMap(map -> map.entrySet().stream())
sẽ là kết quả của tất cả Stream<>
Bản đồ tạo ra một luồng các mục.
Bây giờ từ luồng đó bạn cần phảisưu tầm Khóa và giá trị của mỗi mục trong bản đồ. Giả sử mỗi khóa là duy nhất trên tất cả các bản đồ bạn có thể sử dụng
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
Nhưng nếu khóa không phải là duy nhất, bạn cần quyết định giá trị nào sẽ được đặt trong bản đồ mới với cùng một khóa. Chúng ta có thể làm điều này bằng cách điền vào...
để hoàn thành việc tham gia
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (vOld, vNew) -> ...));
// ^^^
Ở đâuvCũ
lưu giá trị hiện được giữ trong bản đồ kết quả dưới cùng một khóa và vMới
Lưu giá trị mới (từ "lặp" luồng hiện tại).
Ví dụ: nếu bạn muốn bỏ qua các giá trị mới, bạn chỉ cần trả về (vOld, vNew) -> vOld
Giá trị cũ/hiện tại được giữ.
Tóm lại (giả sử các khóa duy nhất):
Bản đồ> bản đồ kết hợp =
/*Luồng của bạn>*/
.flatMap(map -> map.entrySet().stream())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
Giới thiệu về java - Làm cách nào để kết hợp Stream<>
Tôi là một lập trình viên xuất sắc, rất giỏi!