Java Stream::*Match 操作的通用声明
Generic declaration for Java Stream::*Match operations
我想创建一个通用 test()
函数来演示 Stream
操作 allMatch
、anyMatch
和 noneMatch
。它可能看起来像这样(无法编译):
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()
.
中显示的电话
我什至不确定这是否可以完成,所以我很感激任何见解。
以下作品:
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));
..等等,这更容易阅读。
我想创建一个通用 test()
函数来演示 Stream
操作 allMatch
、anyMatch
和 noneMatch
。它可能看起来像这样(无法编译):
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()
.
我什至不确定这是否可以完成,所以我很感激任何见解。
以下作品:
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));
..等等,这更容易阅读。