Java中的Lambda表达式基本运用和基本注意事项。

A.组成Lambda的三要素:形式参数,箭头(“->”),代码块

B.表达式格式:(形式参数) -> {代码块}

        1.形式参数:如果有多个参数,参数之间用逗号隔开,如果没有参数留空即可

        2."- >":固定写法,代表指向动作。

3.是我们具体要做的事情,也就是以前我们所写的方法体内容。

C.Lambda表达式使用的前提

1.有一个接口

2.接口中仅有一个抽象方法

D.Lambda表达式的省略模式

1.参数类型可省略,但是有多个参数的情况下,不能只省略一个。

2.如果参数有且仅有一个,那么小括号可以省略。

3.如果代码块的语句只有一条,可以省略大括号与分号,甚至是return

4.相关对应的代码块

package demo119;
/**
 * @author ln
 * @date 2022/1/19
 * @description Lambda表达式的的省略模式
 */
public class AddableDemo {
    public static void main(String[] args) {
        //省略参数类型(有多个参数的话不能只剩部分)
        useAddable((a,b) -> {
            return a + b;
        });
        //省略参数类型(参数类型只有一个可以省略小括号,分号)
        useFlyable(s ->{
            System.out.println(s) ;
        });
        //省略参数类型(如果代码块的语句只有一条可以省略大括号和分号甚至return)
        useAddable((x,y) -> x + y);


    }
    private static void useAddable(Addable a) {
        int sum = a.add(10, 20);
        System.out.println(sum);
    }

    private static void useFlyable(Flyable f) {
        f.fly("风和日丽,清风万里");
    }

}
package demo119;
/**
 * @author ln
 * @date 2022/1/19
 * @description  Lambda表达式的的省略模式
 */
public interface Addable {
    public abstract  int add(int x, int y);
}
package demo119;
/**
 * @author ln
 * @date 2022/1/19
 * @description  Lambda表达式的的省略模式
 */
public interface Flyable {
    public abstract void fly(String s);
}

E.Lambda表达式的注意事项;

a.使用Lambda表达式必须有接口而且接口只能有一个抽象方法

b.必须有上下文环境才能推导出Lambda对应接口:

        1.根据局部变量的赋值知Lambda对应的接口:Runnable r = () -> system.out.printlin("哈哈哈")

        2.根据调用方法的参数得知Lambda对应的接口:new Thread(() -> system.out.printlin("哈哈哈")).start().

c.重点看第二种的代码

package demo119;
/**
 * @author ln
 * @date 2022/1/19
 * @description Lambda表达式的注意事项
 */
public class LambdaDemo {
    public static void main(String[] args) {
        //注意事项1;接口能有一个抽象方法
        useInter(() -> System.out.println("好好学习,天天向上。"));


        //注意事项2,要有上下文环境
        //局部变量的赋值
        Inter r =(() -> System.out.println("今天不学习,明天变垃圾。"));
        useInter(r);

        //调用方法的参数
        useInter(() -> System.out.println("今天不学习,明天变垃圾。"));


    }

    private static void useInter(Inter i) {
        i.show();
    }
}

F.Lambda表达式和匿名内部类的区别

a.所需类型不同

1.匿名内部类可以是接口可以是抽象类,也可以式具体类

2.Lambda表达式只能是接口

b.使用限制不同

1.如果接口中仅有一个抽象方法可以使用Lambda表达式,也可以使用匿名内部类

2.如果接口中多于有一个抽象方法,则只能使用匿名内部类

c.实现原理不同

1.匿名内部类编译后产生一个单独的.class字节码文件

2.Lambda表达式编译后没有一个单独的.class字节码文件,对应的字节码会在运行时动态产生

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值