lambda表达式的简化历程

百度百科:Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。

函数式 -->静态内部类 -->局部内部类 -->匿名内部类 -->lambda;

特征:

  • 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
  • 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
  • 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
  • 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定表达式返回了一个数值。
  • Lambda 表达式主要用来定义行内执行的方法类型接口,例如,一个简单方法接口。
  • Lambda 表达式免去了使用匿名方法的麻烦,并且给予Java简单但是强大的函数化的编程能力。

无参:

package com.jian.lamda;
//new Thread (()->System.out.println("")).start();
public class Demo {
    //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(); // i like lambda  实现类

        like=new Like2();
        like.lambda(); // i like lambda2  静态内部类

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

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

        //6.lambda简化
        like=()-> {
            System.out.println(" i like lambda5"); // i like lambda5  lambda
        };
        like.lambda();
    }
}

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

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

一个参数:

package com.jian.lamda;

public class Demo2 {
    //静态内部类
    static class love2 implements Ilove{

        @Override
        public void love(String name) {
            System.out.println(" i love you2 "+name);
        }
    }

    public static void main(String[] args) {
        Ilove love = new love();
        love.love("song");  //i love you1 song  实现类

        love=new love2();
        love.love("songsong");//i love you2 songsong  静态内部类

        //局部内部类
        class love3 implements Ilove{
            @Override
            public void love(String name) {
                System.out.println(" i love you3 "+name);
            }
        }

        love=new love3();
        love.love("songsongsong");// i love you3 songsongsong  局部内部类

        //匿名内部类
        Ilove love4=new Ilove() {
            @Override
            public void love(String name) {
                System.out.println(" i love you4 "+name);
            }
        };
        love4.love("songsongsongsong");// i love you4 songsongsongsong  匿名内部类

        //lambda
    /*    Ilove love5=(String name) -> {
                System.out.println(" i love you5 "+name);
        };*/
        //简化1 去掉参数类型
       /* Ilove love5=(name) -> {
            System.out.println(" i love you5 "+name);
        };*/
        //简化2 简化括号
       /* Ilove love5=name -> {
            System.out.println(" i love you5 "+name);
        };*/
        //简化3 去掉花括号
        Ilove love5=name -> System.out.println(" i love you5 "+name);
        //1.lambda表达式只能有一行代码的情况  只能简化为一行  如果有多行 就用代码块包围
        //2.前提是接口为函数式接口
        //3.多个参数也能去掉参数类型  (要去都去,逗号分隔,但必须加括号)
        love5.love("songsongsongsongsong");// i love you5 songsongsongsongsong  lambda
    }
}

//接口
interface Ilove{
    void love(String name);
}

//实现类
class love implements Ilove{

    @Override
    public void love(String name) {
        System.out.println(" i love you1 "+name);
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值