zoukankan      html  css  js  c++  java
  • Java学习:Lambda表达式

    Lambda表达式

    函数式编程思想概述
    ---强调做什么,而不是以什么形式做

    面向对象的思想:

    • 做一件事情,找一个能解决这个的事情的对象,调用对象的方法,完成事情

    函数式编程思想

    • 只要能获取到结果,谁去做的,这么做的都不重要,重视的是结果,不重视过程

    传统写法和Lambda写法对比

    传统写法

    public class CaiNiao{
        public static void main(String[] args){
            //匿名内部类,实现多线程
            //Runnable task = new Runnable()
            Runnable task = new Runnable(){
                @Override
                public void run(){//覆盖重写抽象方法
                    System.out.println(Thread.currentThread().getName()+"新线程创建了");
                    System.out.println("多线程任务执行!");
                    
                }
            };
            new Thread(task).start();//开启线程
        
        }
        
    }

    匿名内部类的好处与弊端

    • 一方面,匿名内部类可以帮助我们省去实现类的定义;
    • 另一方面,匿名内部类的语法确实太复杂了
    public class CaiNiao{
        public static void main(String[] args){
            //匿名内部类,实现多线程
            //Runnable task = new Runnable()
            new Thread(new Runnable(){
                @Override
                public void run(){//覆盖重写抽象方法
                    System.out.println(Thread.currentThread().getName()+"新线程创建了");
                    System.out.println("多线程任务执行!");
                }
            }).start();//开启线程
        
        }
        
    }

    Lambda写法

    ()->{}

    public class CaiNiao{
        public static void main(String[] args){
            //匿名内部类,实现多线程
            //Runnable task = new Runnable()
            new Thread(()->{//覆盖重写抽象方法
                    System.out.println(Thread.currentThread().getName()+"新线程创建了");
                    System.out.println("多线程任务执行!");
                }
            ).start();//开启线程
        
        }
        
    }

    Lambda表达式的标准格式

    由三部分组成:

    1. 一些参数
    2. 一个箭头
    3. 一段代码

    格式:

    • (参数列表)-> {一些重写方法的代码}:

    解释说明格式:

    • ():接口中抽象方法的参数列表,没有参数,就空着
    • ->:传递的意思,把参数传递给方法体{}
    • {}:重写接口的抽象方法的方法体

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

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

    可以省略的内容

    1. (参数列表):括号中的参数列表的数据类型,可以省略不写
    2. (参数列表):括号中的参数如果只有一个,那么类型和()都可以省略
    3. (一些代码):如果()中的代码只有一行,无论是否由返回值,都可以省略({},return,分号)

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

    • JDK1.7 版本之前,创建集合对象必须把前后的泛型都写上
    • JDK1.7 版本之后,=号后边的泛型可以省略,后边的泛型可以根据前边的泛型推导出来
        new Thread(()->{//覆盖重写抽象方法
            System.out.println(Thread.currentThread().getName()+"新线程创建了");
        }
    ).start();//开启线程
            
        new Thread(()->System.out.println(Thread.currentThread().getName()+"新线程创建了")).start();//开启线程

    Lambda的使用前提

    1. 使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法;
    2. 使用Lambda必须具有上下文推断。

    备注:有且仅有一个抽象方法的接口,成为“函数式接口”。

  • 相关阅读:
    IO流(5)—缓冲流
    vue-element-admin 中文问题
    npm 下载慢解决方案
    fatal: unable to connect to github.com
    为什么有sessionStorage,localStorage等,还需要vuex
    vuex页面刷新数据丢失的解决办法
    Node中JWT的使用
    socket.io 实现长连接演示代码
    WebSocket 实现长连接演示代码
    jquery ajax上传文件
  • 原文地址:https://www.cnblogs.com/cainiao-chuanqi/p/11300138.html
Copyright © 2011-2022 走看看