Câu hỏi này là loại đã được đăng ở đây: How to convert Map<String, String> to Map<Long, String> using guavaTại sao Ổi không cung cấp một cách để chuyển đổi các phím đồ
Tôi nghĩ câu trả lời của CollinD là thích hợp:
Tất cả các phương pháp ổi đối với chuyển và lọc sản xuất các kết quả lười biếng ... chức năng/vị ngữ chỉ được áp dụng khi cần khi đối tượng được sử dụng. Họ không tạo bản sao. Do đó, mặc dù, việc chuyển đổi có thể dễ dàng phá vỡ các yêu cầu của
Set
. Ví dụ:Ví dụ: bạn có
Map<String, String>
chứa cả hai phím "1" và "01" làm khóa. Cả hai đều khác nhauString
s và do đó,Map
có thể chứa cả hai khóa dưới dạng hợp pháp. Tuy nhiên, nếu bạn chuyển đổi chúng bằng cách sử dụngLong.valueOf(String)
, cả hai đều ánh xạ tới giá trị1
. Chúng là không còn các khóa riêng biệt nữa. Điều này sẽ không làm hỏng bất cứ điều gì nếu bạn tạo bản sao của bản đồ và thêm các mục nhập, vì bất kỳ phím nào trùng lặp sẽ ghi đè mục nhập trước đó cho khóa đó. Tuy nhiên, việc chuyển đổi một cách lười biếngMap
sẽ không có cách nào để thực thi các khóa duy nhất và do đó sẽ phá vỡ hợp đồng củaMap
.
Điều này đúng, nhưng thực sự tôi không hiểu tại sao nó không được thực hiện vì:
Khi việc chuyển đổi quan trọng xảy ra, nếu 2 phím được "sáp nhập", một ngoại lệ thời gian chạy có thể là nâng lên, hoặc chúng ta có thể vượt qua một lá cờ để chỉ cho ổi thực hiện bất kỳ giá trị của các giá trị nhiều nhất có thể cho chìa khóa mới (Computed failfast/khả năng chạy failsafe)
chúng ta có thể có một Maps.transformKeys trong đó sản xuất một Multimap
Có một nhược điểm nào mà tôi không thấy khi làm những việc như vậy?
Có vẻ phù hợp hơn với lập trình viên.stackexchange.com –