Lambda表达式有参数有返回值的练习(自定义接口)和Lambda省略模式&使用前提

Lambda表达式有参数有返回值的练习(自定义接口)

//定义接口
public
interface Calculator { //定义一个计算两个int整数和的方法并返回结果 public abstract int cacl(int a,int b);
复制代码
//测试
 public static void main(String[] args) {
        //调用Cacl方法,方法的参数是一个接口。可以使用匿名内部类
        Cacl(10, 20, new Calculator() {
            @Override
            public int cacl(int a, int b) {
                return a+b;
            }
        });
        //使用Lambda表达式简化内部类的书写
        Cacl(120,130,(int a,int b)->{
            return a+b;
        });
    }
    public static void Cacl(int a, int b, Calculator c){
        int sum = c.cacl(a,b);
        System.out.println(sum);
    }
复制代码

 

Lambda省略模式&使用前提

Lambda表达式:是可推导,可以省略

凡是根据上下文推导出来的内容,都可以省略书写可以省略的内容:

  1.(参数列表):括号中参数列表的数据类型,可以省略不写

  2.(参数列表):括号中的参数如果只有一个,那么类型和()都可以省略

  3.{一些代码}:如果中的代码只有一行,无论是否有返回值,都可以省略({}, return,分号)

注意:

  要省略{}, return,分号必须一起省略

复制代码
 public static void main(String[] args) {
        //使用Lambda方式实现多线程
        new Thread(()->{
            System.out.println(Thread.currentThread().getName()+"新的线程创建了");
        }
        ).start();

        //优化省略Lambda表达式
        new Thread(()->
            System.out.println(Thread.currentThread().getName()+"新的线程创建了")).start();


//        //使用Lambda表达式,简化匿名内部类
//        Arrays.sort(arr,(Person o1,Person o2)-> {
//            return o1.getAge()-o2.getAge();
//        });
//
        //使用Lambda优化省略表达式,简化匿名内部类
        Arrays.sort(arr,( o1, o2)-> o1.getAge()-o2.getAge());
    }
复制代码

 

使用前提

Lambda的语法非常简洁,完全没有面向对象复杂的束缚。但是使用时有几个问题需要特别注意︰

  1.使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法。

    无论是DK内置的 Runnable 、comparator 接口还是自定义的接口,只有当接口中的抽象方法存在且唯一时,才可以使用Lambda。

  2.使用Lambda必须具有上下文推断。

 

    也就是方法的参数或局部变量类型必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例。

 
public static void main(String[] args) {
//使用Lambda方式实现多线程
new Thread(()->{
System.out.println(Thread.currentThread().getName()+"新的线程创建了");
}
).start();

//优化省略Lambda表达式
new Thread(()->
System.out.println(Thread.currentThread().getName()+"新的线程创建了")).start();


}
posted @   漁夫  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示