Lambda表达式

2019-04-19  本文已影响0人  ONE_PIECES

函数式编程思想:
只要能获取到结果,谁去做的,怎么做的都不重要,重视的是结果,不是过程;将怎么做回归到做什么的本质

07-2 Runnable接口实现多线程

代码分析:
对于Runnable的匿名内部类,分析出几点内容:
* Thread类需要Runnable接口做为参数,其中的抽象run方法中编写线程任务代码
* 为了实现run方法体,不得不需要Runnable接口的实现类
* 可以使用匿名内部类代替RunnableImpl具体实现类
* 必须覆盖抽象的run方法,名称方法参数返回值等都需要写一遍,而且不能写错
* 实际上,只有方法体才是关键

//Lambda表达式的实现,组成部分
    1. 一些参数
    2. 一个箭头
    3. 一段代码
    (参数类别)->{一些重写方法的代码}
        new Thread(()->{
            System.out.println("似乎只有这个run方法是核心");
        }).start();  

同样的语义,使用Lambda语法更简单
()-> System.out.println("似乎只有这个run方法是核心")

07-3 Lambda表达是举例
//无参数无返回值-----------------------------------
new Thread(runnableImpl).start();

new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("似乎只有这个方法体才是核心");
            }
        }).start();  
        
//有参数有返回值-----------------------------------
       //匿名内部类实现
        invlckCal(10, 20, new Calculator() {
            @Override
            public int Calculator(int a, int b) {
                return a+b;
            }
        });

        //Lambada,实现带参数带返回值(这个调用的方法体有参数)
        invlckCal(10,20,(int a,int b)->{
            return a+b;
        });
         //优化格式
        invlckCal(10,20,( a, b)->
             a+b
        );
        
  //上面调用的方法      
 public static void invlckCal(int a,int b,Calculator calculator){
       int sum =  calculator.Calculator(a, b);
        System.out.println("计算方法 被调用"+sum);
    }              
07-3 Lambda省略
  1. Lambda表达式是可以推到可以省略的
  2. 凡是可以根据上下文推到出来的内容都可以省略不写
    可以省略的内容:
    1. (参数列表):括号中参数列表的数据类型可以省略不写
    2. (参数列表):括号中的参数只有一个,那么参数类型和()都可以省略不写
    3. {一些代码}:如果{}中的代码只有一行,无论有返回值,可以省略{},return,分号,要一起省略
      使用的前提
  3. 使用Lambda必须具有接口,而且要求接口中有且仅有一个抽象方法
  4. 使用Lambda必须具有上下文推断能力
    备注:有且仅有一个抽象方法的接口,称为函数式接口
上一篇下一篇

猜你喜欢

热点阅读