cuốn sách gpt4 ai đã làm

java - 如何将 Stream<>>> 合并为一个 Map>?

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-01 22:37:19 25 4
mua khóa gpt4 Nike

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ớiLư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<>>> thành một Map>? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/56505925/

25 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress