• Lamdba表达式


    Lamdba表达式

    1. lambda表达式允许把函数作为一个方法的参数;

    2. 使用lambda表达式可以使代码变得更加简洁紧凑

      lambda表达式使用的前提是实现的接口中只有一个必须要实现的方法

      在Java8中,接口中有通过default修饰的默认实现方法,即这个方法具有默认的实现,实现类可以按需要重写default方法

    语法形式为 () -> {},其中 () 用来描述参数列表,{} 用来描述方法体,-> 为 lambda运算符 ,读作(goes to)

    ​ 可以参考这篇博文:https://www.cnblogs.com/haixiang/p/11029639.html#228891873

    在lambda表达式中的一些省略写法:
    • ()中参数类型符可以省略;
    • ()中的参数如果只有一个,则可以将()省略;
    • 如果 { } 中只有一条语句,则可以将大括号省略
    • 如果{ }中,直接返回值则可以将return省略

    lambda表达式可以指定一个普通方法来快速的实现接口中的抽象方法,但是要求两个方法的返回类型,输入参数类型和数量相同才可,其使用方法为:

    • 方法拥有者::方法名

    静态方法的拥有者是这个类,而非静态方法的拥有者则是类的实例化对象

    lamabda表达式可以很方便的用于实现接口的匿名内部类方法重写,典型的就是线程的创建;
    pulic class Resolve{
        public static void main(String [] args) {
            Thread thread = new Thread (()->{
                for(int i=0;i<10;i++){
                    System.out.println("i++");
                }
            });
            thread.start();
        }
    }
    

    //因为在实例化thread的时候,其构造方法中的参数是实现Runnable接口的类,而实现该接口必须重写其run方法,run方法的是无参数无返回值的,所以lambda形式即如上所示

    lambda表达式也可以用于集合的遍历、排序和删除,能够使代码更简洁

    • 遍历集合的时候是借助于集合实现类的forEach()方法,其本质是在该方法中传入实现Consumer接口的实例对象,排序是借助sort(),删除是借助removeIf()方法传入实现Predicate接口的实例对象
    • 其实本质上还是通过lambda表达式来简易的创建实现接口的匿名内部类,并重写其中的方法;因为在必须实现这个接口的情形下,一些创建匿名内部类的代码确实是可以省略,而着重关注其重写的方法体和参数。
  • 相关阅读:
    Android对包名和类名是否存在的判断
    Android权限表
    论艺术的背后还有纪律
    jeecgboot/IDEA中 debug不行,run可以
    java集合类
    HashMap、HashTable、LinkedHashMap和TreeMap用法和区别
    protobuf序列化算法原理
    谁能帮我看看着究竟是什么问题呀,我在本机运行都是好好的,但在别人的机子上运行就出这个呢?我快疯了!!!
    VS删除空白行
    POJ 2516 Minimum Cost
  • 原文地址:https://www.cnblogs.com/zwwang/p/15091475.html
Copyright © 2020-2023  润新知