我對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
作爲參數傳遞給方法?
你可能尋找指定的可變參數 –