栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java函数式接口定义和使用【JDK1.8新特性】

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java函数式接口定义和使用【JDK1.8新特性】

什么是函数式接口

只有一个必须被重写的抽象方法的接口
@FunctionalInterface 注解强制检测是否为函数式接口

为什么使用函数式接口

当重写函数式接口的方法后,发现,这个方法中执行逻辑相同,只有判断规则不同,就把判断规则抽取出来,自己定义,提高代码复用性

代码举例:
//在类的尖括号中 表示需要的泛型个数 ,T和R两种泛型
@FunctionalInterface 
interface Class003_TestLambda {
	//返回值类型是提供的 R 泛型,提供的两个参数类型一致为 T类型
    public  R getR(T t,T r);
}
用Lambda表达式使用函数式接口

lambda表达式的使用

class TestLambda001{
    public static void main(String[] args) {
    	//2:调用定义的方法,传递参数,第三个直接传递lambda表达式,使用表达式中规则
        System.out.println(getAdd(1L, 2L, (a,b)-> a< testLambda001){
        return  testLambda001.getR(l1,l2);
    }
}

每一步解析如何调用执行

 
jdk中的四大内置函数式接口 内置函数式接口作用

当你需要写一个方法,方法中有一段代码规则或者逻辑不固定,为了提高方法的复用【灵活性】,将判断规则或者逻辑放在外面,交由执行的时候具体在定义,
这时候需要一个函数式接口,可以直接使用内置的符合需要的函数式接口

内置函数式接口代码使用Demo
public class Class001_FunctionalInterface {
    public static void main(String[] args) {
        testComsumer(5000,m-> System.out.println("为主播打赏消费"+m));
        testComsumer(10000,m-> System.out.println("今天做全身spa消费"+m));

        System.out.println(strHandler("   哈哈 ",s->s.trim()));
        System.out.println(strHandler("   abc ",s->s.toUpperCase()));

        //[5,10]
        System.out.println(testNumRandom(5,()->(int)(Math.random()*(10-5+1)+5)));
        System.out.println(testNumRandom(10,()->(int)(Math.random()*(20-10+1)+10)));

        System.out.println(testString(List.of("张三","李四","张三丰","欧阳王渊"),s->s.length()>=3));
    }

    //对一个集合中的多个字符串进行某种规则的过滤,返回过滤后的结果
    public static List testString(List list, Predicate pre){
        //定义一个List集合,存储满足条件的字符串
        List strs = new ArrayList<>();
        //遍历原list集合,拿到每一个字符串进行判定
        for(String s :list){
            //满足条件字符串放入strs集合
            if(pre.test(s)){
                strs.add(s);
            }
        }
        return strs;
    }

    //功能: 提供指定个数的,指定规则的随机整数
    //定义方法: 1)需求  2)参数:  不确定的数据|有可能会改变的数据定义参数列表上    3)返回值: 方法执行完毕是否需要得到一个结果,需要定义返回值   4)方法名 : 见名知意
    public static List testNumRandom(int num, Supplier sup){
        //定义一个List集合,存储生成的随机数
        List list = new ArrayList<>();
        //循环num次,每次调用get方法生成一个随机数
        for(int i=1;i<=num;i++){
            list.add(sup.get());
        }
        //返回结果
        return list;
    }

    //功能: 对一个字符串进行某种行为的操作得到结果
    public static String strHandler(String str, Function fun){
        return fun.apply(str);
    }

    //功能: 每天的缴费记录
    public static void testComsumer(double money, Consumer con){
        con.accept(money);
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/681337.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号