stworzyłem funkcję filtrowania z wieloma orzeczników, dla których wykonuję logiczne i dla nich:typ docelowy tej wypowiedzi musi być funkcjonalny interfejs
@SafeVarargs
public static <T> Stream<T> filter(Stream<T> source, Predicate<T>... predicates) {
return source.filter(Arrays.stream(predicates).reduce(predicates[0], Predicate::and));
}
Dzwoniąc:
filter(IntStream.range(0, 10).boxed(), x -> x % 2 != 0, x -> x%3 == 0).forEach(System.out::println);
Działa dobrze i drukuje 3 i 9. Jednak gdy przekazuję jeden predykat taki jak:
filter(IntStream.range(0, 10).boxed(), x -> x % 2 != 0).forEach(System.out::println);
Dostaję błąd kompilacji:
The target type of this expression must be a functional interface
Dlaczego tak jest?
uzyskać informacje o wersji używam Eclipse Luna 1.
Czy możesz dodać więcej kodu ... – Devavrata
@Devavrat Więcej kodu czego? Wszystko jest już opublikowane ... Sygnatura metody i treść + wywołanie, które powoduje błąd kompilacji. – user2336315
Czy kompilacja działa w wierszu poleceń? Byłem w stanie uruchomić oba twoje przykłady w IntelliJ 14.0.2 i otrzymałem odpowiednio '3',' 9' i '1',' 3', '5',' 7', '9'. Wygląda na to, że może to być problem Eclipse. – mkobit