JAVA Funtion 浅谈 以及上手demo 用方法名作为入参

本文深入探讨了函数式接口(FunctionalInterface)的概念,特别是在Java中如何利用Function接口将方法作为参数传递,实现代码的通用性和灵活性。通过具体示例,展示了如何在StudentDataModel类中使用Function接口处理学生数据,实现属性的动态获取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  •  

  • Funtion介绍

函数式接口就是(Functional Interface )指的是有且只有一个抽象方法,但可以有多个非抽象方法的接口。

我知道这么说比较笼统,但如果想要深刻理解这个是什么意思,光靠字面说说是远远不够的,此次就以近期接触的项目作为入口,我们谈谈它的好用之处在哪

  • 需求

可以用对象的方法,去绑定一个方法作为入参,实现一些通过功能,话不多说,贴代码。StudentDataModel.java,使用Function作为入参,调用apply获得绑定对象的方法执行之后的值

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;

public class StudentDataModel<T> {

    private LinkedHashMap<String,Function> maps = new LinkedHashMap<>();

    private List<T> allObjs ;

    public <V>StudentDataModel  addValue(String valueKey , Function<T,V> functionTest ){
        maps.put(valueKey,functionTest);
        return this;
    }

    public void setData( List<T> Items){
        allObjs = Items;
    }


    public void show(){
        for(T item : allObjs){
            for(Map.Entry<String,Function> entry : maps.entrySet()){
                Function functionTest =  entry.getValue();
                System.out.print(functionTest.apply(item));
            }
        }

    }

}

Model 测试类Student.java

public class Student {
    private String name ;
    private String code;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }
}
import java.util.ArrayList;
import java.util.List;

public class TestMain {



    public static void main(String args[]){
        StudentDataModel<Student> studentStudentDataModel = new StudentDataModel<>();
        studentStudentDataModel.addValue("1",Student::getName);
        studentStudentDataModel.addValue("2",Student::getCode);


        List<Student> studentList = new ArrayList<>();
        Student studentTest1 = new Student();
        studentTest1.setName("kimler");
        studentTest1.setCode("001");

        Student studentTest2 = new Student();
        studentTest2.setName("jack");
        studentTest2.setCode("002");

        studentList.add(studentTest1);
        studentList.add(studentTest2);
        studentStudentDataModel.setData(studentList);
        studentStudentDataModel.show();


    }
}

以及最后的运行结果。

有了能把方法作为参数的用法,很多功能就可以写的很通用,我也在继续学习。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值