首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java函数接口与lambda表达式

java函数接口与lambda表达式
EN

Stack Overflow用户
提问于 2021-06-11 18:34:05
回答 2查看 190关注 0票数 1

功能接口

代码语言:javascript
复制
import java.util.ArrayList;
public interface EmployeeAudit {

    public ArrayList<String> fetchEmployeeDetails (double salary);
}

在公共班级主要

代码语言:javascript
复制
public static EmployeeAudit findEmployee(){
    ArrayList<String> name=new ArrayList<>();
    return  (sal) -> {
        employeeMap.forEach((key,value) -> {
            if(value<=sal) 
                name.add(key);
        });
        return name;
    };
}    

主要职能:

代码语言:javascript
复制
ArrayList<String> str = findEmployee().fetchEmployeeDetails(sal);

有人能帮助我理解sal的值是如何传递到findEmployee()的吗?因为findEmployee()是按照链的顺序被首先调用的。以及这些电话是如何工作的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-11 18:42:47

实际上,您的方法findEmployee()会实例化对象,即EmployeeAudit对象。EmployeeAudit是一个接口,所以它需要定义它的方法,因为它们只有一个,所以它是一个函数接口,可以用lambda完成,但是它等同于

代码语言:javascript
复制
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方法,这可能更容易通过拆分代码来查看。

代码语言:javascript
复制
EmployeeAudit ea = findEmployee();
ArrayList<String> str = ea.fetchEmployeeDetails(10);

您甚至可以想象创建实现EmployeeAudit的类并非常容易地使用

代码语言:javascript
复制
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;
        }
    }
}
票数 4
EN

Stack Overflow用户

发布于 2021-06-11 18:50:25

findEmployee()返回一个匿名函数(实际上是一个定义为函数的EmployeeAudit,因为EmployeeAudit是一个函数接口)。

这个函数被定义为接受一个名为sal的输入参数,但这不是主调用的sal:您可以将sal重命名为findEmployee中的任何其他内容,并且代码将同样工作。

内部sal是一个参数的名称,就像在任何其他常规函数中使用的那样:

代码语言:javascript
复制
void someFunction(double sal) { ??? }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67941991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档