• lambda小结


    新公司用Java8,所以搜了下文档,发现其主要是两个概念:Lambda表达式和函数式接口。

    Lambda是一段可执行的代码(类似匿名函数)。

    Lambda的设计者们为了让Java现有的体系与Lambda表达式良好兼容,考虑了很多方法,最终产生了函数式接口(FunctionalInterface)这个概念。

    所谓函数式接口就是只有一个待实现方法的接口,仍然可以有多个默认方法和静态方法。(注意,待实现方法不包括Object类中的方法,见文尾。)

    (默认方法和静态方法不是这里的重点,看看就明白了。)

    上面的说法不太清晰,其实就是Java仍然是调用类的静态方法或者调用其实例的方法,具体的方法就是将Lambda映射到相应的接口上面。

    以排序为例,传统方法是:

    Arrays.sort(array, new XxxComparator());

    使用Lambda的方法是:

    Arrays.sort(array, (e1, e2) -> (/*具体的比较方法*/) );

    其本质上,仍然是将Lambda表达式映射到Comparator接口上面(相当于其实现类),即:

    Comparator comp = (e1, e2) -> (/*具体的比较方法*/);

    然后再调用comp。

    需要说明的是,在Java8中Comparator已经是函数式接口了。

    类似的还有Runnable接口等。

    new Thread(()->{
        for(int i=0;i<10;i++){
            System.out.println(i);
        }
    }).start();

    额外说明:Comparator接口中其实还有一个待实现方法equals(),但所有类都最终继承自Object类,所以该方法默认已被实现。

    Java中很多接口都添加了Object类中的方法,目的是为了javadoc,有兴趣的自行研究。

  • 相关阅读:
    ArrayList和Vector的比较
    ExtJs与jQuery的比较
    列表类型的内建函数
    序列类型函数
    SQL函数
    HTTP状态码
    序列切片
    数值运算
    数值类型转换
    Python中is和==的区别
  • 原文地址:https://www.cnblogs.com/larryzeal/p/5377303.html
Copyright © 2020-2023  润新知