Tôi tạo ra một chức năng để lọc với nhiều vị từ mà tôi thực hiện một logic AND cho họ:Các loại mục tiêu của biểu thức này phải là một giao diện chức năng
@SafeVarargs
public static <T> Stream<T> filter(Stream<T> source, Predicate<T>... predicates) {
return source.filter(Arrays.stream(predicates).reduce(predicates[0], Predicate::and));
}
Khi gọi:
filter(IntStream.range(0, 10).boxed(), x -> x % 2 != 0, x -> x%3 == 0).forEach(System.out::println);
Nó hoạt động tốt và in 3 và 9. Tuy nhiên khi tôi vượt qua một vị từ đơn lẻ như:
filter(IntStream.range(0, 10).boxed(), x -> x % 2 != 0).forEach(System.out::println);
Tôi nhận được lỗi biên dịch:
The target type of this expression must be a functional interface
Tại sao điều này?
Đối infos Tôi sử dụng Eclipse Luna phiên bản 1.
Bạn có thể đăng thêm mã .... – Devavrata
@Devavrat Mã khác về cái gì? Mọi thứ đã được đăng ... Chữ ký phương thức và nội dung + lời gọi tạo ra lỗi biên dịch. – user2336315
Trình biên dịch có hoạt động trên dòng lệnh không? Tôi đã có thể chạy cả hai ví dụ của bạn trong IntelliJ 14.0.2 và có '3',' 9' và '1',' 3', '5',' 7', '9' tương ứng. Có vẻ như nó có thể là một vấn đề của Eclipse. – mkobit