从零开始JAVA---Lambda表达式

写在前面

时间回到2008年,JDK8发布,大数据时代的来临,带来了函数式编程思想 --> Scala。同时JDK新增了一些东西,比如:

1.带来了Lambda表达式:简化Java这种面向对象的定义繁琐,在处理各种数学运算时,频繁需要定义类,对象,方法之类的操作。

2.出现了default普通方法:它出现的目的是为了修正JDK上古版本接口中拓展方法使用的,不常用。

3.出现了函数式接口一个接口有且只有一个抽象方法,这种解口称之为函数式接口。

可以使用 @FunctionalInterface 注解 检查当前接口是否只包含一个抽象方法。

Lambda表达式

能使用Lambda表达式的前提就是接口必须是函数式接口,只有惟一的一个抽象方法

Lambda表达式的前身---匿名内部类

@FunctionalInterface
interface FunInterface {
    void test();
}

public class LambdaTest {
    public static void main(String[] args) {
        fun(new FunInterface() {
            @Override
            public void test() {
                System.out.println("匿名内部类的方式实现了FunInterface接口");
            }
        });
        fun(() ->{
            System.out.println("Lambda表达式的方式实现了FunInterface接口");
        });
    }
    public static void fun(FunInterface fi){
        fi.test();
    }
}

 Lambda表达式中()表示复写的接口中的方法,()里面有无参数由接口决定。{ } 表示匿名内部类实现了 FunInterface接口。{ }中表示了方法体。

 Lambda表达式把匿名内部类中多余的new方法定义之类的全都省略了,只保留了方法的参数和方法体的实现!!

 Lambda表达式的四种情况–对应抽象方法的四种分支

1.无返回值无参数

public class AllLambda {
    public static void main(String[] args) {
        //1.无返回值无参数
        NoparaNoReturn doubleNo = () -> {
            System.out.println("无返回值,无参数的接口对象");
        };
        doubleNo.test();
    }
}

interface NoparaNoReturn {
    void test();
}

规则一:若方法体只有一行代码,可以省略{ }

//规则一:若方法体只有一行代码,可以省略{ }
NoparaNoReturn doubleNo = () -> System.out.println("无返回值无参数的Lambda表达式");
doubleNo.test();

 

2.无返回值有参数

public class AllLambda {
    public static void main(String[] args) {
            //2.无返回值有参数
            HasparaNoReturn hasparaNoReturn = (int x) -> {
                System.out.println("无返回值,有参数的接口对象");
                x += 20;
                System.out.println(x);
            };
            hasparaNoReturn.test(10);
    }
}


interface HasparaNoReturn {
    void test(int a);
}

规则二:若方法的参数只有一个,可以省略小括号
规则三:可以省略Lambda表达式中参数的类型,若省略类型,都需要省略。

//规则二:若方法的参数只有一个,可以省略小括号
//规则三:可以省略Lambda表达式中参数的类型,若省略类型,都需要省略。
HasparaNoReturn hasparaNoReturn1 = x -> {
      System.out.println("无返回值,有参数的接口对象");
      x += 20;
      System.out.println(x);
};
hasparaNoReturn1.test(10);

其中X的类型由接口中的抽象方法中的类型决定。 

3.有返回值无参数

public class AllLambda {
    public static void main(String[] args) {
        //3.有返回值无参数
        NoparaHasReturn noparaHasReturn = () -> {
            int a = 10;
            int b = 20;
            return a + b;
        };
        System.out.println(noparaHasReturn.test());
    }
}

interface NoparaHasReturn {
    int test();
}

规则四:若抽象方法存在返回值且覆写的方法体只有一行,此时方法体的大括号,return都能省略。

//规则4.若抽象方法存在返回值且覆写的方法体只有一行,此时方法体的大括号,return都能省略
NoparaHasReturn noparaHasReturn1 = () -> 10 + 20;
System.out.println(noparaHasReturn1.test());

4.有返回值有参数

public class AllLambda {
    public static void main(String[] args) {
        //4.有返回值有参数
        HasparaHasReturn hasparaHasReturn = (x,y) -> x += y;
        System.out.println(hasparaHasReturn.test(20,30));
    }
}

interface HasparaHasReturn {
    int test(int a, int b);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值