ich eine Funktion erstellt mit mehreren Prädikaten zu filtern, für die ich eine logische führen und für sie:Der Zieltyp dieser Ausdruck muss eine funktionale Schnittstelle sein
@SafeVarargs
public static <T> Stream<T> filter(Stream<T> source, Predicate<T>... predicates) {
return source.filter(Arrays.stream(predicates).reduce(predicates[0], Predicate::and));
}
Beim Aufruf:
filter(IntStream.range(0, 10).boxed(), x -> x % 2 != 0, x -> x%3 == 0).forEach(System.out::println);
Es funktioniert gut und druckt 3 und 9. Wenn ich jedoch ein einzelnes Prädikat wie:
erhalte, bekomme ich ein Übersetzungsfehler:
The target type of this expression must be a functional interface
Warum ist das?
Für Infos verwende ich Eclipse-Luna-Version 1.
Können Sie mehr Code posten .... – Devavrata
@Devavrat Mehr Code von was? Alles ist schon gepostet ... Die Methodensignatur und der Body + der Aufruf, der den Kompilierungsfehler erzeugt. – user2336315
Funktioniert die Kompilierung in der Befehlszeile? Ich konnte beide Beispiele in IntelliJ 14.0.2 ausführen und bekam '3',' 9' und '1',' 3', '5',' 7', '9'. Sieht so aus, als könnte es ein Eclipse-Problem sein. – mkobit