Sử dụng bộ sưu tập google. Ví dụ:
Function<ViewValue, Long> transform = new Function<ViewValue, Long>() {
@Override
public Long apply(ViewValue from) {
return from.getId();
}
};
List<ViewValue> list = Lists.newArrayList();
List<Long> idsList = Lists.transform(list, transform);
UPDATE:
On Java 8 bạn không cần ổi. Bạn có thể:
import com.example.ViewValue;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
Function<ViewValue, Long> transform = ViewValue::getId;
List<ViewValue> source = new ArrayList<>();
List<Long> result = source.stream().map(transform).collect(Collectors.toList());
Hoặc chỉ:
List<ViewValue> source= new ArrayList<>();
List<Long> result = source.stream().map(ViewValue::getId).collect(Collectors.toList());
cập nhật tiếp theo (Người cuối cùng sau khi Javaslang để Vavr thay đổi tên):
Hiện nay nó có giá trị đề cập về các giải pháp với
Thư viện Javaslang (
http://www.javaslang.io/)
Thư viện Vavr (http://www.vavr.io/). Giả sử rằng chúng ta có danh sách của chúng tôi với các đối tượng chính hãng:
List<ViewValue> source = newArrayList(new ViewValue(1), new ViewValue(2), new ViewValue(2));
Chúng ta có thể thực hiện chuyển đổi với Danh sách lớp từ thư viện Javaslang (trên dài chạy thu thập là không thuận tiện):
List<Long> result = io.vavr.collection.List.ofAll(source).map(ViewValue::getId).toJavaList();
Nhưng bạn sẽ xem sức mạnh chỉ với các danh sách của Javaslang:
io.vavr.collection.List<ViewValue> source = javaslang.collection.List.of(new ViewValue(1), new ViewValue(2), new ViewValue(3));
io.vavr.collection.List<Long> res = source.map(ViewValue::getId);
Tôi khuyến khích xem bộ sưu tập sẵn có và các loại mới trên thư viện đó (Tôi thích đặc biệt là kiểu Thử). Bạn sẽ tìm thấy tài liệu theo địa chỉ sau:
http://www.javaslang.io/javaslang-docs/
http://www.vavr.io/vavr-docs/.
PS. Do Oracle và từ "Java" trong tên họ đã phải thay đổi tên thư viện từ javaslang thành cái gì khác. Họ đã quyết định Vavr.
giải pháp Rất Javaesque - nhưng không phải trong một cách tốt. Nó không chính xác làm giảm số lượng hoặc sự phức tạp của mã, phải không? –
Tôi muốn nói rằng nó là LINQ-esque hơn Java-esque cá nhân. Tôi muốn tạo mã chuyển đổi và sau đó cô lập khía cạnh chiếu, nhưng nếu bạn muốn sao chép lôgic chuyển đổi tải nhiều lần, điều đó là tốt. Nó sẽ đẹp hơn rất nhiều với các biểu thức lambda, tất nhiên. –
Nó không giống như chúng ta làm với Comparator trong Java? –