我創建了一個函數有用於我執行邏輯多個謂詞到過濾器和用於它們:這個表達式的目標類型必須是功能接口
@SafeVarargs
public static <T> Stream<T> filter(Stream<T> source, Predicate<T>... predicates) {
return source.filter(Arrays.stream(predicates).reduce(predicates[0], Predicate::and));
}
致電時:
filter(IntStream.range(0, 10).boxed(), x -> x % 2 != 0, x -> x%3 == 0).forEach(System.out::println);
它工作正常,並打印3和9.但是,當我通過一個單一的謂詞,如:
filter(IntStream.range(0, 10).boxed(), x -> x % 2 != 0).forEach(System.out::println);
我得到編譯錯誤:
The target type of this expression must be a functional interface
這是爲什麼?
對於相關信息我使用Eclipse紅月版本1
你可以發佈更多的代碼.... – Devavrata
@Devvrat更多的代碼是什麼?一切已經發布了......方法簽名和body +調用會產生編譯錯誤。 – user2336315
編譯是否在命令行上工作?我能夠在IntelliJ 14.0.2中運行你的兩個例子,並分別獲得了3,9,1,3,5,7,9。看起來它可能是一個Eclipse問題。 – mkobit