zoukankan      html  css  js  c++  java
  • JDK 8

    我们知道 JDK 8 新增了 Lambda Expression 这一特性。

    JDK 8 为什么要新增这个特性呢?

    这个特性给 JDK 8 带来了什么好处?

    它可以做什么?不可以做什么?

    在这篇文章,我打算简单聊聊这些话题。

     

    1. Lambda Expression 是什么?

    Lambda Expression,又名 Anonymous function,  它起源于 Alonzo Church 在 1936 年提出的 lambda calculus。

    这是数理逻辑中的一个概念,具体可以看 Anonymous function

    2. JDK 8 为什么引入这个特性?

    在 JDK 8 前,我们没有办法直接将功能(代码)作为参数传递给方法。

    但我们可以将功能封装成类(匿名类),传递给方法。

    比如 java.util.Arrays.sort(),接收一个 Comparator 参数来指定排序算法(策略模式):

        /*
         *  java.util.Arrays中的sort静态方法,接收两个参数:T[] a, Comparator<? super T> c。
         *  Comparator是一个接口,含有方法 int compare(T o1, T o2);
         */
    
        public static <T> void sort(T[] a, Comparator<? super T> c) {
           if (c == null) {
               sort(a);
           } else {
               if (LegacyMergeSort.userRequested)
                   legacyMergeSort(a, c);
               else
                   TimSort.sort(a,  , a.length, c, null,  ,  );
           }
       }

    JDK 8 引入这个新特性后,Java 具备了将功能作为参数传递给方法的能力,实现了 code as data(to treat functionality as method argument, or code as data)。

    函数式语言和一些将函数视作 first-class function 的语言都支持 lambda expression。

    Functional Interface 出现的地方都可以使用 Lambda Expression。

    Lambda Expression 使得代码量更少,因此代码更简洁、可读性更强(适合仅使用一次或几次、对复用要求不高的代码)。

    JDK 8 中的 lambda expression 可以和 aggregate operations 一起使用,使得代码更加简洁、易懂、不易出错。

     

    3. JDK 8 中 Lambda Expression 的限制

    (1)Lambda Expression 会抛出异常,这样的 lambda expression 不能同 Java 集合框架中的API一起使用;

    (2) Lambda Expression 没有引入新的作用域,它可以直接引用 enclosing method 中的 local variable,这些 local variable must be final/effectively final(必须被final修饰,或虽然没有被final修饰,但没有被更改过)。例子可以看Accessing Local Variables of the Enclosing Scope 这一节。

  • 相关阅读:
    小程序路由
    机器学习笔记—支持向量机(1)
    用极大似然估计法推出朴素贝叶斯法中的先验概率估计公式
    机器学习笔记—生成学习
    机器学习笔记—再谈广义线性模型
    机器学习笔记—指数分布簇和广义线性模型
    机器学习笔记—Logistic 回归
    机器学习笔记—局部权重线性回归
    机器学习笔记—线性回归
    机器学习笔记1
  • 原文地址:https://www.cnblogs.com/huangzejun/p/8582494.html
Copyright © 2011-2022 走看看