Given the code fragments:



public class Person {

    String name;
    int age;

    public Person(String n, int a) {
        name = n;
        age = a;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}
public class Test {

    public static void checkAge(List<Person> list, Predicate<Person> predicate) {
        for (Person p : list) {
            if (predicate.test(p)) {
                System.out.println(p.name + " ");
            }
        }
    }

    public static void main(String[] args) {
        List<Person> iList = Arrays.asList(new Person("Hank", 45), new Person("Charlie", 40), new Person("Smith", 38));
        // line n1
    }
}

Which code fragment, when inserted at line n1, enables the code to print Hank?

A.

checkAge(iList, () -> p.getAge() > 40);

B.

checkAge(iList, Person p -> p.getAge() > 40);

C.

checkAge(iList, p -> p.getAge() > 40);

D.

checkAge(iList, (Person p) -> { p.getAge() > 40; });

題解

Java 8導入了Lambda語法,可以參考這篇文章來學習:

https://magiclen.org/java-8-lambda/

Predicate的JDK原始碼片段如下:

@FunctionalInterface
public interface Predicate<T> {

    boolean test(T t);
}

要實體化Predicate類別,必須要實作test方法。選項C是正確的Lambda語法的用法,可以實作出Predicate類別的test方法。