Ich bin ziemlich neu in Java und nach einem Kurs, um es besser zu verstehen. In der folgenden Test code
sollen wir in der Lage sein, eine Methode zu erstellen, die mehrere Predicate
akzeptiert. Ich kann es nicht richtig verstehen. Collections
scheint logisch, aber sie können nicht verwendet werden. also dachte ich, Predicate<T>[] predicates
würde ausreichen. Aber kein Erfolg dort.Akzeptieren Sie mehrere Prädikate als Argument für die Methode
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;
}
}
Prüfregeln
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);
}
}
Wie ist es möglich, mehr Predicate
als Argument für die Methode zu akzeptieren?
Du bist wahrscheinlich für Yosef varargs –