ho creato una funzione di filtrare con più predicati per cui eseguire un AND logico per loro:Il tipo di destinazione di questa espressione deve essere un'interfaccia funzionale
@SafeVarargs
public static <T> Stream<T> filter(Stream<T> source, Predicate<T>... predicates) {
return source.filter(Arrays.stream(predicates).reduce(predicates[0], Predicate::and));
}
quando chiamate:
filter(IntStream.range(0, 10).boxed(), x -> x % 2 != 0, x -> x%3 == 0).forEach(System.out::println);
Funziona bene e stampa 3 e 9. Tuttavia quando passo un singolo predicato come:
filter(IntStream.range(0, 10).boxed(), x -> x % 2 != 0).forEach(System.out::println);
Ottengo un errore di compilazione:
The target type of this expression must be a functional interface
Perché è questo?
Per info Io uso la versione di Eclipse Luna 1.
Puoi pubblicare altro codice .... – Devavrata
@Devavrat Altro codice di cosa? Tutto è già pubblicato ... Il metodo signature e body + l'invocazione che produce l'errore di compilazione. – user2336315
La compilazione funziona sulla riga di comando? Sono stato in grado di eseguire entrambi i tuoi esempi in IntelliJ 14.0.2 e ho ottenuto '3',' 9' e '1',' 3', '5',' 7', '9' rispettivamente. Sembra che potrebbe essere un problema di Eclipse. – mkobit