秃头星人进化记(Lambda表达式学习总结)

使用背景

原因:
(1):避免匿名内部类定义过多
(2):简化代码量
(3):去杂留核
其实质属于函数式编程。
函数式接口:任何接口,如果接口中只含有一个抽象方法,那么他就是一个函数式接口。可以通过lambda表达式来创建接口的对象
例如: 线程中的Runnable接口:

 public interface Runnable {
	//只有一个抽象方法
    public abstract void run();
}

引出Lambda表达式

1:必须存在一个函数式接口
2:起初使用成员内部类
3:简化->静态内部类
4:简化->局部内部类
5:简化->匿名内部类
6:简化->Lambda表达式:相比于匿名内部类,由于接口名和方法名唯一不变就将其省略:…new Ilike() {
@Override
public void lambda… 省略这些后加上一个”->“即可。

总代码如下(示例):

public class LambdaTest {

    //3:简化->静态内部类
    static class like2 implements Ilike{
        @Override
        public void lambda() {
            System.out.println("i like lambda2");
        }
    }

    public static void main(String[] args) {
        Ilike ilike=new like();
        ilike.lambda();

        new like2().lambda();

        //4:简化->局部内部类
        class like3 implements Ilike{
            @Override
            public void lambda() {
                System.out.println("i like lambda3");
            }
        }
        new like3().lambda();

        //5:简化->匿名内部类,没有名字,但是必须借助接口或者父类
        Ilike like4 = new Ilike() {
            @Override
            public void lambda() {
                System.out.println("i like lambda4");
            }
        };
        like4.lambda();

        //6:简化->lambda表达式  相当于省去了
        Ilike like5 = () -> {
            System.out.println("i like lambda5!!!!!!!");
        };
        like5.lambda();
    }


}

//1:定义一个函数式接口
interface Ilike{
    void lambda();

}

//2:定义接口实现类
class like implements Ilike{
    @Override
    public void lambda() {
        System.out.println("i like lambda!!!");
    }
}

再次简化Lambda表达式

1:之前通过内部类一步步简化到初始形态的Lambda表达式可以根据情况再次简化
2:这次尝试带参数的抽象方法
3:还是得先定义函数式接口
4:初始形态
5:一级简化:参数前面类型可省略,多个参数不同类型也可以省略,用逗号隔开即可
6:二级简化:参数两边的小括号亦可省略,但是多个参数的话就不能省略了

//String name ,int age类型可以省略,括号不能去!!!
ilove=(name,age) -> {
            System.out.println("I LOVE you"+age+name);
        };

7:三级简化:代码行两边的大括号也可省略,但是多行代码的话就不能省略了

ilove=name -> {
            System.out.println("I LOVE you"+name);
            System.out.println("I LOVE you"+name);
            System.out.println("I LOVE you"+name);
            //这样大括号就不能省略了!!!
        };

总代码如下(示例):

//尝试带参数的抽象方法 并一步一步简化
public class LambdaTest2 {
    public static void main(String[] args) {
        Ilove ilove=null;
        //初始lambda
        ilove=(String name)->{
            System.out.println("I Love you"+name);
        };
        ilove.mylove("zhao you");

        //一级简化  如果是多个参数 不管类型是否相同 都可以省掉类型
        ilove=(name) -> {
            System.out.println("I LOVE you"+name);
        };
        ilove.mylove("gao lan ling");

        //二级简化 如果是多个参数 则不能去掉括号
        ilove=name -> {
            System.out.println("I LOVE you"+name);
        };
        ilove.mylove("lan ling");

        //三级简化 如果式多行代码命令 则不能去掉大括号
        ilove=name -> System.out.println("I LOVE you"+name);
        ilove.mylove("ling");
    }

}



//定义函数式接口
interface Ilove{
    void mylove(String name);
}

总结

之前一直不知道Lambda表达式是啥,通过一次线程的学习意外学到了lambda的基本使用,若有错误,烦请大佬指教。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值