java - 接受多个谓词作为方法的参数

标签 java generics predicate

我对 Java 还很陌生,正在学习类(class)以更好地理解它。在 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 - 接受多个谓词作为方法的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46644337/

相关文章:

java - 不兼容的类型 : int[] cannot be converted to Comparable<Object>[]

c# - 封装谓词的模式/实践

c# - 如何在编译时检索泛型基类的参数? (即不使用反射)

c# - 如何编写复杂 SQL 但使用谓词(通过 Dapper)

c# - 将两个 lambda 表达式与内部表达式结合起来

java - 在 If/Switch 语句中使用用户输入的字符

java - 如何定义一个灵活接受声明类型的子类的函数

Java字时钟

Java 8 FlatMap - 在嵌套表单中添加项目并使用 FlatMap 检索对象

c# - 如何形成我的节点和树通用类