接受多个谓词作为方法的参数
Accept multiple predicates as argument to method
我是 Java 的新手,正在学习一门课程以更好地理解它。在下面的 Test code
中,我们应该能够创建一个接受多个 Predicate
的方法。我似乎无法正确处理。 Collections
看起来合乎逻辑,但不能使用。所以我认为 Predicate<T>[] predicates
就足够了。但是那里没有成功。
public class Utils {
// public static <T> Predicate<T> anyPassPredicate(Predicate<T>[] predicates) {
public static <T> Predicate<T> anyPassPredicate(Collection<Predicate<T>> predicates) {
Predicate<T> pred = predicates.stream().reduce(Predicate::or).orElse(x->false);;
return pred;
}
public static <T> T firstAnyMatch(List<T> list, Predicate<T> predicate) {
for (T element : list) {
if (predicate.test(element)) {
return element;
}
}
return null;
}
}
测试代码
public class Test {
public static void main(String[] args) {
List<String> words = Arrays.asList("Jan", "Jos", "Anna", "Pieter", "Johan");
Predicate<String> anyMatch = Utils.anyPassPredicate(s -> s.contains("o"), s -> s.length() > 5);
Utils.firstAnyMatch(words, anyMatch);
}
}
如何接受多个 Predicate
作为方法的参数?
为了让一个方法接受相同类型的未指定数量的参数,你需要使用varargs,这是由省略号指定的
static <T> Predicate<T> anyPassPredicate(Predicate<T>... predicates) {
return Arrays.stream(predicates)
.reduce(Predicate::or)
.orElse(x->false);
}
我是 Java 的新手,正在学习一门课程以更好地理解它。在下面的 Test code
中,我们应该能够创建一个接受多个 Predicate
的方法。我似乎无法正确处理。 Collections
看起来合乎逻辑,但不能使用。所以我认为 Predicate<T>[] predicates
就足够了。但是那里没有成功。
public class Utils {
// public static <T> Predicate<T> anyPassPredicate(Predicate<T>[] predicates) {
public static <T> Predicate<T> anyPassPredicate(Collection<Predicate<T>> predicates) {
Predicate<T> pred = predicates.stream().reduce(Predicate::or).orElse(x->false);;
return pred;
}
public static <T> T firstAnyMatch(List<T> list, Predicate<T> predicate) {
for (T element : list) {
if (predicate.test(element)) {
return element;
}
}
return null;
}
}
测试代码
public class Test {
public static void main(String[] args) {
List<String> words = Arrays.asList("Jan", "Jos", "Anna", "Pieter", "Johan");
Predicate<String> anyMatch = Utils.anyPassPredicate(s -> s.contains("o"), s -> s.length() > 5);
Utils.firstAnyMatch(words, anyMatch);
}
}
如何接受多个 Predicate
作为方法的参数?
为了让一个方法接受相同类型的未指定数量的参数,你需要使用varargs,这是由省略号指定的
static <T> Predicate<T> anyPassPredicate(Predicate<T>... predicates) {
return Arrays.stream(predicates)
.reduce(Predicate::or)
.orElse(x->false);
}