でなければならない私は、私は論理AND彼らのために行っているため、複数の述語でフィルタリングする機能を作成しました:ターゲット・タイプは、機能インタフェース
@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
@Devavrat何のコードですか?すべてが既にポストされています...メソッドシグネチャとボディ+コンパイルエラーを生成する呼び出し。 – user2336315
コンパイルはコマンドラインで動作しますか? IntelliJ 14.0.2で両方のサンプルを実行し、それぞれ「3」、「9」、「1」、「3」、「5」、「7」、「9」を得ました。それはEclipseの問題かもしれないように見えます。 – mkobit