Tôi tự hỏi tại sao API Bộ sưu tập Java không chứa các phương thức tiện dụng map
trên các loại bộ sưu tập khác nhau. Tôi muốn viết một cái gì đó như:Tại sao bộ sưu tập Java không cung cấp phương thức bản đồ thuận tiện?
List<Foo> list = ...;
List<String> result = list.map(Foo::toString);
Thay vào đó tôi có để tạo ra một dòng suối, bản đồ và thu thập, như thế này:
List<Foo> list = ...;
List<String> result = list.stream().map(Foo::toString).collect(toList());
Nó sẽ không được dễ dàng như việc thực hiện phương pháp mặc định này trong giao diện java.util.List? Ví dụ.
default <R> List<R> map(Function<E, R> mapper){
return stream().map(mapper).collect(Collectors.toList());
}
Ở lần đầu tiên, có vẻ như các phương pháp triệu tập khác đã có sẵn. Ví dụ:
list.stream().forEach(x -> {});
có thể được viết như
list.forEach(x -> {});
Tuy nhiên, so sánh không phải là tốt. Iteratable.forEach là một phương thức mặc định trên giao diện cấp cao nhất và không cần chỉ định kiểu trả về. Nó không tạo ra một dòng dưới mui xe, mà là sử dụng các thuộc tính Iteratables để ... cũng ... lặp lại tất cả các phần tử.
Vì vậy, câu hỏi vẫn còn: Tại sao không có phương thức bản đồ trên mỗi giao diện API bộ sưu tập? Có lẽ vì nó không đủ linh hoạt bởi vì bạn sẽ cần quyết định loại trả lại?
Tôi chắc chắn những người triển khai đã nghĩ về điều đó và có lý do để không đưa nó vào. Và tôi muốn hiểu tại sao.
Chỉ bốn ngày trước đó: [“Tại sao' Danh sách' không có phương thức mặc định 'map' khi nó có' forEach'? ”] (http://stackoverflow.com/q/42364761/2711488) – Holger