我需要更多关于lambda表达式的说明。 'p'
代表List<Person> people
的方式?你能解释清楚吗
List<Person> people = new ArrayList<>();
people.add(new Person("Mohamed", 69));
people.add(new Person("Doaa", 25));
people.add(new Person("Malik", 6));
Predicate<Person> pred = (p) -> p.getAge() > 65;
答案 0 :(得分:6)
不,p
不是List<Person>
,而是Person
。
Predicate<Person> pred = p -> p.getAge() > 65;
此lambda表达式声明1个形式参数并返回boolean
。因此,它可以表示为Predicate
(因为Predicate
接口具有一个具有此精确签名的单一功能方法,称为test
)。 p
的类型将取决于您正在创建的Predicate
的类型。
例如,在以下代码中,p
将是List<Person>
:
Predicate<List<Person>> predicate = p -> p.isEmpty();
答案 1 :(得分:1)
java中的Lambdas它只是anonymous classes
的语法shugar您示例中的代码等于
List<person> people = new ArrayList<>();
people.add(new Person("Mohamed", 69));
people.add(new Person("Doaa", 25));
people.add(new Person("Malik", 6));
Predicate<person> pred = new Predicate<person>() {
public boolean test(person p) {
return p.getAge() > 65;
}
}
为了简化java中的语法,您可以跳过lambda表达式中的类型声明,只添加值的名称,就像您一样。
Predicate<person> pred = (p) -> p.getAge() > 65;
或者,如果你愿意,你可以写这样的东西
Predicate<person> pred = (person p) -> p.getAge() > 65;
需要注意的是,只有能够以某种方式从lambda代码中计算出来,才能跳过类型声明。例如
Comparator<String> comp
= (firstStr, secondStr) // Same as (String firstStr, String secondStr)
-> Integer.compare(firstStr.length(),secondStr.length());