lambda表达式:简化代码

函数式接口Functional Interface是学习java8函数式编程的关键所在

简化方式丧心病狂,没学过的根本看不懂的

1、函数式接口的定义:一个任意的接口,接口中只含有一个抽象方法(),那它就是一个函数式接口。

比如:

//标准函数式接口:Runnable接口:实现此接口成为自定义线程类
public interface Runnable{
    public abstract void run ();
}

2、对于函数式接口,我们可以使用lambda表达式来创建改接口的对象

lambda小测试一,代码是怎么一步步简化的:

package com.bes.mybatis_plus.TestLambda;

public class TestLambda1 {

    //3、静态内部类
    static class  Like2 implements Ilike{
        @Override
        public void lambda() {
            System.out.println("i like lambda2 !!!");
        }
    }

    public static void main(String[] args) {
        //老方法
        Ilike like = new Like();
        like.lambda();

        like = new Like2();
        like.lambda();

        //4、局部内部类
        class Like3 implements Ilike{
            @Override
            public void lambda() {
                System.out.println("i like lambda3 !!!");
            }
        }

        like = new Like3();
        like.lambda();

        //5、匿名内部类,没有名次,必须借助接口或者父类;名字省了
        like = new Ilike() {
            @Override
            public void lambda() {
                System.out.println("i like lambda4 !!!");
            }
        };
        like.lambda();

        //6、一步步简化,简化到java8新特性:用lambda简化函数式接口实现,
        // 实现接口不写了,实现接口的方法不写了,直接写方法里要做的事就行了
        // 能省就省,代码极致简化
        like = ()->{
            System.out.println("i like lambda5 !!!");
        };

        like.lambda();
    }
}

//1、写一个函数式接口:只有一个抽象方法的接口
interface Ilike{
    void lambda();
}

//2、写一个实现类
class Like implements Ilike{
    @Override
    public void lambda() {
        System.out.println("i like lambda !!!");
    }
}

输出结果:

i like lambda !!!
i like lambda2 !!!
i like lambda3 !!!
i like lambda4 !!!
i like lambda5 !!!

lambda小测试二,当函数式接口的那个抽象方法带参数,该怎么写:

package com.bes.mybatis_plus.TestLambda;

public class TestLambda2 {

    public static void main(String[] args) {
        /**
         *  接口名 接口对象 = (抽象方法的参数)->{
         *      实现的方法体
         *  }
         */
        //简化,去掉实现,去掉实现的抽象方法
/*        ILove love = (int a)->{
            System.out.println("I love you--> !!!" + a);
        };*/

        //再次简化,去掉参数类型,因为接口中定义了参数类型,这里定义参数名
/*        ILove love = (a)->{
            System.out.println("I love you--> !!!" + a);
        };*/

        //再再次简化,去掉括号,直接参数名加箭头,多个参数,参数名用括号括起来,中间用,隔开
/*        ILove love = a->{
            System.out.println("I love you--> !!!" + a);
        };*/

        //如果实现体只有一行代码,还可以再再再次简化!!!,连大括号都去掉,真尼玛变态(但是现实中一般用不着,因为一般不会只有一行代码)
        //接口名 接口对象名 = 方法参数名 -> 方法实现体
//        ILove love = a-> System.out.println("I love you--> !!!" + a);

        //多个参数,方法名用括号括起来
        ILove love = (a,str,isOK)->{
            System.out.println("I love you--> !!!" + a +" " + str +" " + isOK);
        };

        /**
         * 1、如果方法实现体有多行代码,则只能用上面那种简化方式
         * 2、必须是函数式接口(接口里只有一个抽象方法)
         * 3、多个参数也都可以去调参数类型,只保留参数名,但是要去掉就都去掉;参数名用括号括起来
         */

        love.love(521, "潘狗子", true);
    }
}

interface ILove{
    //单个参数测试
//    void love(int a);
    //多个参数测试
    void love(int a, String str, boolean isOK);
}

测试结果:

I love you--> !!!521
I love you--> !!!521 潘狗子 true
/**
 * 1、如果方法实现体有多行代码,则不能省略大括号
 * 2、接口必须是函数式接口(接口里只有一个抽象方法)
 * 3、没有参数,就必须要一个括号再加箭头
 * 4、多个参数也都可以去调参数类型,只保留参数名,但是要去掉就都去掉;参数名用括号括起来
 */

函数式接口名 接口对象 = (参数名)->{

// 抽象方法实现体

}

缺点:可读性大大降低,很多人没学过直接看不懂,学过的也要熟悉了才能快速理解代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值