Tôi đang cố gắng thực hiện thao tác bản đồ trên mỗi mục nhập trong đối tượng Map
.Bản đồ luồng Java 8 trên bộ mục nhập
Tôi cần lấy tiền tố ra khỏi khóa và chuyển đổi giá trị từ loại này sang loại khác. Mã của tôi đang tiến hành các mục cấu hình từ một Map<String, String>
và chuyển sang một Map<String, AttributeType>
(AttributeType
chỉ là một lớp giữ một số thông tin. Hơn nữa giải thích là không thích hợp cho câu hỏi này.)
Điều tốt nhất tôi đã có thể đưa ra bằng cách sử dụng Java 8 Streams như sau:
private Map<String, AttributeType> mapConfig(Map<String, String> input, String prefix) {
int subLength = prefix.length();
return input.entrySet().stream().flatMap((Map.Entry<String, Object> e) -> {
HashMap<String, AttributeType> r = new HashMap<>();
r.put(e.getKey().substring(subLength), AttributeType.GetByName(e.getValue()));
return r.entrySet().stream();
}).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
}
là không thể xây dựng một Map.Entry
do nó là một giao diện làm việc tạo ra các đĩa đơn nhập Map
dụ và việc sử dụng các flatMap()
, mà dường như xấu xí.
Có phương án nào tốt hơn không? Có vẻ như đẹp hơn để làm điều này bằng cách sử dụng vòng lặp for:
private Map<String, AttributeType> mapConfig(Map<String, String> input, String prefix) {
Map<String, AttributeType> result = new HashMap<>();
int subLength = prefix.length();
for(Map.Entry<String, String> entry : input.entrySet()) {
result.put(entry.getKey().substring(subLength), AttributeType.GetByName(entry.getValue()));
}
return result;
}
Tôi có nên tránh API Stream cho điều này? Hoặc là có một cách đẹp hơn tôi đã bỏ qua?
'indexes.entrySet() 'là gì? –
@TanmayPatil vị trí tốt, ví dụ cố định. –