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

    Java Lambda表达式

     

    Lambda是什么

    在JDK 1.8  版本中新增了Lambda表达式

    作用:简化匿名内部类

    使用前提:必须是函数式接口

    函数式接口:只有一个必须被重写的抽象方法的接口

    强制检测是否为函数式接口,注解@FunctionalInterface

     

    语法

        ()->{}  
    ()  匹配要重写的抽象方法的参数列表
    ->  Lambda符号箭头具有上下文推导的作用
    {}  匹配要重写的抽象方法的方法体

     

    匿名内部类

    在讲解Lambda表达式之前先写一个匿名内部类的,好在接下来对它进行改写

    public class Demo01 {
    public static void main(String[] args) {

    new MyInterface() {
    @Override
    public void mehtod() {
    System.out.println("我是匿名内部类");
    }
    }.mehtod();
    }
    }

    interface MyInterface {
    void mehtod();
    }

     

    Lambda表达式

    用法1

    首先对上面的匿名内部类使用Lambda表达式进行改写

    public class Demo01 {
    public static void main(String[] args) {

    MyInterface m = () -> {
    System.out.println("我是Lambda表达式");
    };
    m.mehtod();
    }
    }

    @FunctionalInterface
    interface MyInterface {
    void mehtod();
    }

    用法2 

    方法体中如果方法语句只有一句,方法体前后的 {} 可以省略

    public class Demo01 {
    public static void main(String[] args) {

    MyInterface m = () -> System.out.println("我是Lambda表达式");
    m.mehtod();
    }
    }

    @FunctionalInterface
    interface MyInterface {
    void mehtod();
    }

    用法3

    如果有参数,参数的数据类型可以省略

    箭头有上下文推导的作用,可以根据上下文,寻找到所需要的参数类型

    public class Demo01 {
    public static void main(String[] args) {

    MyInterface m = (a,b) -> System.out.println("我是Lambda表达式"+a+b);
    m.mehtod();
    }
    }

    @FunctionalInterface
    interface MyInterface {
    void mehtod(int a,int b);
    }

    用法4

    如果有参数且只有一个,前后的()可以省略

    public class Demo01 {
    public static void main(String[] args) {

    MyInterface m = a -> System.out.println("我是Lambda表达式"+a);
    m.mehtod();
    }
    }

    @FunctionalInterface
    interface MyInterface {
    void mehtod(int a);
    }

    用法5

    如果语句体只有一句,并且还是return 语句, return关键字及前后的{}可以一起省略

    public class Demo01 {
    public static void main(String[] args) {

    MyInterface m = () -> "我是Lambda表达式";
    System.out.println(m.mehtod());
    }
    }

    @FunctionalInterface
    interface MyInterface {
    String mehtod();
    }
  • 相关阅读:
    点击单元格(LinkToAction)获取Table行号和数据(Table篇一)
    金额和数量不显示0
    自定event事件之全局初始化中自动触发(二)
    自定event事件之手动触发(一)
    Python的requests如何同时post图片二进制流和json数据application/octet-stream
    树莓派点亮LED灯需要几行代码?3行。小孩子都能学会
    50元求解pyqt加载并显示pdf问题
    pyqt5加载pdf文档失败
    建个群,互相关心
    唉,十年前的沙雕照片
  • 原文地址:https://www.cnblogs.com/CHOI-6/p/13257944.html
Copyright © 2011-2022 走看看