功能接口
import java.util.ArrayList;
public interface EmployeeAudit {
public ArrayList<String> fetchEmployeeDetails (double salary);
}在公共班级主要
public static EmployeeAudit findEmployee(){
ArrayList<String> name=new ArrayList<>();
return (sal) -> {
employeeMap.forEach((key,value) -> {
if(value<=sal)
name.add(key);
});
return name;
};
} 主要职能:
ArrayList<String> str = findEmployee().fetchEmployeeDetails(sal);有人能帮助我理解sal的值是如何传递到findEmployee()的吗?因为findEmployee()是按照链的顺序被首先调用的。以及这些电话是如何工作的。
发布于 2021-06-11 18:42:47
实际上,您的方法findEmployee()会实例化对象,即EmployeeAudit对象。EmployeeAudit是一个接口,所以它需要定义它的方法,因为它们只有一个,所以它是一个函数接口,可以用lambda完成,但是它等同于
public static EmployeeAudit findEmployee() {
ArrayList<String> name = new ArrayList<>();
return new EmployeeAudit() {
@Override
public ArrayList<String> fetchEmployeeDetails(double sal) {
employeeMap.forEach((key, value) -> {
if (value <= sal)
name.add(key);
});
return name;
}
};
}然后,在该实例中,调用fetchEmployeeDetails方法,这可能更容易通过拆分代码来查看。
EmployeeAudit ea = findEmployee();
ArrayList<String> str = ea.fetchEmployeeDetails(10);您甚至可以想象创建实现EmployeeAudit的类并非常容易地使用
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
interface EmployeeAudit {
ArrayList<String> fetchEmployeeDetails(double salary);
}
public class Test {
static Map<String, Integer> employeeMap = new HashMap<>();
public static void main(String[] args) {
employeeMap.put("Jean", 10);
employeeMap.put("Jean2", 100);
employeeMap.put("Jean3", 100);
EmployeeAudit ea = new EmployeeAuditImpl();
ArrayList<String> str = ea.fetchEmployeeDetails(10);
System.out.println(str);
}
static class EmployeeAuditImpl implements EmployeeAudit {
@Override
public ArrayList<String> fetchEmployeeDetails(double sal) {
ArrayList<String> name = new ArrayList<>();
employeeMap.forEach((key, value) -> {
if (value <= sal)
name.add(key);
});
return name;
}
}
}发布于 2021-06-11 18:50:25
findEmployee()返回一个匿名函数(实际上是一个定义为函数的EmployeeAudit,因为EmployeeAudit是一个函数接口)。
这个函数被定义为接受一个名为sal的输入参数,但这不是主调用的sal:您可以将sal重命名为findEmployee中的任何其他内容,并且代码将同样工作。
内部sal是一个参数的名称,就像在任何其他常规函数中使用的那样:
void someFunction(double sal) { ??? }https://stackoverflow.com/questions/67941991
复制相似问题