这是我的类
Employee
,有3个数据成员,一个构造函数和相应的设置器和获取器。package lambdaandrelated;
public class Employee {
private String name;
private String gender;
private int age;
public Employee(String name, String gender, int age) {
super();
this.name = name;
this.gender = gender;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
这是另一个具有3种检查方法的类:
a. 检查员工是否为男性。 b. 检查员工是否为女性。 c. 检查员工年龄是否大于传递的年龄。
package lambdaandrelated;
import java.util.function.Predicate;
public class EmployeePredicates {
public static Predicate<Employee> isMale(){
return emp -> emp.getGender().equalsIgnoreCase("Male"); - **Line 1**
}
public static Predicate<Employee> isFemale(){
return emp -> emp.getGender().equalsIgnoreCase("Female");
}
public Predicate<Employee> isGreaterThan(Integer age){
return emp -> emp.getAge()>age;
}
}
这是我的主要类:
package lambdaandrelated;
import java.util.function.Predicate;
public class EmployeeMain {
public static void main(String[] args) {
Employee emp1 = new Employee("Parul", "Female", 24);
Employee emp2 = new Employee("Kanika", "Female", 24);
Employee emp3 = new Employee("Sumit", "Male", 27);
Predicate<Employee> predicate1 = new EmployeePredicates().isGreaterThan(23);
System.out.println(predicate1); **Line2**
boolean value = predicate1.test(emp3);
System.out.println(value);
boolean value1 = predicate1.negate().test(emp3); **Line3**
System.out.println(value1);
System.out.println(predicate1.negate()); **Line4**
}
}
我的疑问:
1)第一行是实现Predicate
接口的test()
方法吗?如果是,为什么isMale()
方法的返回类型是Predicate<Employee>
而不是boolean
?
2)第二行的输出即变量'predicate1'的值为" lambdaandrelated.EmployeePredicates$$Lambda$1/746292446@4617c264 "。但变量'predicate1'的类型是Predicate<Employee>
。这里背后发生了什么?
3)什么是Predicate
的否定?如果它意味着否定boolean
输出,那么它不应该被应用于test()
方法的输出,而应该应用于谓词本身(如第3行所做)。如果它意味着否定Predicate
对象,那么为什么以及如何否定test()
方法的输出?背后发生了什么,改变了true
到false
的布尔值。是返回的谓词对象类型决定了test()
方法的输出吗?
4)此外,第四行的输出也是"java.util.function.Predicate$$Lambda$2/2055281021@5ca881b5",而negate()
的返回类型也是Predicate<T>
,这似乎很好。那么为什么isMale()
/isFemale()
的输出格式不同?