1

、、およびの操作test()を示す汎用関数を作成したいと思います。次のようになります (コンパイルされません)。StreamallMatchanyMatchnoneMatch

import java.util.stream.*;
import java.util.function.*;

public class Tester {
    void test(Function<Predicate<Integer>, Boolean> matcher, int val) {
        System.out.println(
            Stream.of(1,2,3,4,5).matcher(n -> n < val));
    }
    public static void main(String[] args) {
        test(Stream::allMatch, 10);
        test(Stream::allMatch, 4);
        test(Stream::anyMatch, 2);
        test(Stream::anyMatch, 0);
        test(Stream::noneMatch, 0);
        test(Stream::noneMatch, 5);
    }
}

matcher(私が思うに) 私の課題は、ここで行う方法ではなく、おそらくジェネリックにする必要があるものを定義することです。また、ここで示した呼び出しが可能かどうかもわかりませんmain()

これができるかどうかさえわからないので、洞察をいただければ幸いです。

4

1 に答える 1

4

以下の作品:

static void test(
      BiPredicate<Stream<Integer>, Predicate<Integer>> bipredicate, int val) {
    System.out.println(bipredicate.test(
         IntStream.rangeClosed(1, 5).boxed(), n -> n < val));
}

public static void main(String[] args) {
    test(Stream::allMatch, 10);
    test(Stream::allMatch, 4);
    test(Stream::anyMatch, 2);
    test(Stream::anyMatch, 0);
    test(Stream::noneMatch, 0);
    test(Stream::noneMatch, 5);
}

...しかし、これらが何をするかを示すことがポイントである場合は、おそらくもっと簡単に書く方がよいでしょう

System.out.println(IntStream.rangeClosed(1, 5).allMatch(n -> n < 10));

...etcetera の方がはるかに読みやすいです。

于 2015-11-12T21:55:01.637 に答える