1. lamdba 表达式
    主要是简化代码量,将代码执行过程量代码过长的部分进行处理简化(个人理解)
    官方定义:
    lambda表达式是一种匿名函数,lamdba允许函数作为一个方法的参数(函数作为方法参数传递),将代码象数据一样传递,目的是简化代码编写.
  1. 函数式接口

    个人理解: 就是一个接口,里面只有一个抽象方法

    官方定义: …..没找了

    jdk8 提供了一个注解, 校验编译时是否符合语法

    注解名: @FunctionalInterface

  2. 示例
    传统新建一个线程并启动的代码如下:

    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            System.out.println("running...");
        }
    };
    
    new Thread(runnable).start();
    
    /**
    上述是我们jdk8以前常用的新建线程的方式,需要实例化一个runnable 对象
    将runnable 对象传入实例化的Thread中,调用start方法
    */
    
    /** 在jdk8 后, 此种类似的方式可简化为一下公式
    函数式对象  变量名  =  (参数1,参数2....) -> { 方法体  };
    例如下面的线程创建,可以写为如下方式:
    */
    
    //简化1
    Runnable r2 = ()->System.out.println("简化方式1");
    new Thread(r2).start();
    
    /** 上述例子中,因为new Runnable() 中没有参数传入,所以在简化时我们也不传入参数,方法体中
        展示我们需要执行的业务,逻辑代码即可,上述简化1还可以简化为如下方式:
    */
    
    //简化2
    new Thread(()->System.out.println("简化方式2")).start();
    
    /** 在简化1 中可以看到,我们使用进程启用时,最终使用的时thread 对象方式,Thread 对象中也需要一个实例对象传入,所以也可以看作一个内部匿名方法进行调用*/
    

​ 上述示例及过程可以看到,简化方式可以减少代码量的开发,以前要写很多行的代码,现在只需要整理为一行就可 以实现以前多行的代码的效果

​ 上述示例只是表述的无参情况下的应用,那么有参呢,请参考如下代码:

/** 接下来我新建一个比较器,用来处理list或者arrays 的排序,分组*/
Comparator<String> comparator = new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.length()-o2.length();
            }
        };
TreeSet<String> treeSet = new TreeSet<>(comparator);
/** 传统方式 下同示例1中的写法,需要将comparator 实现内部类方法,然后将实例化的comparator传入TreeSet 中进行 处理后续业务,其中需要用到两个参数o1,o2 简化后代码如下:*/

//示例1
Comparator<String> c2 = (o1,o2)->o1.length()-o2.length();
TreeSet<String> treeSet1 = new TreeSet<>(c2);
/** 简化后可以看到,只需要在()中带入o1,o2 即可, 且不需要关心参数的类型,此处我觉得时因为类似于反射(反射也不太懂),将传入的参数与Comparator<String> 的内部接口进行映射对照,所以可以找到执行的时compare的方法
示例1 还可以简化为如下代码:
*/

//示例2
TreeSet<String> treeSet2 = new TreeSet<>((o1,o2)->o1.length()-o2.length());

/** 因为new TreeSet中需要传入一个Comparator的实例对象,所以可以等量代换为示例2 的写法*/
    
  1. 注意事项

    lambda 使用了新的操作符号->



本文作者:• curtain •
版权声明:本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!