<center id="j91su"></center>
  • <sub id="j91su"></sub><strike id="j91su"></strike>
    <wbr id="j91su"><pre id="j91su"></pre></wbr><wbr id="j91su"></wbr>
    1. <center id="j91su"><form id="j91su"><legend id="j91su"></legend></form></center><wbr id="j91su"><pre id="j91su"></pre></wbr>
    2. <sub id="j91su"></sub>
      <sub id="j91su"></sub>
      <strike id="j91su"><rt id="j91su"><ol id="j91su"></ol></rt></strike>
      <nav id="j91su"></nav>

    3. 欢迎光临福州华大IT学院

        JavaLambda表达式学习笔记

        JavaLambda表达式是Java8引入的一个新的功能,可以说是模拟函数式编程的一个语法糖,类似于Javascript中的闭包,但又有些不同,主要目的是提供一个函数化的语法来简化我们的编码。

        Lambda基本语法

        Lambda的基本结构为(arguments)->body,有如下几种情况:

        参数类型可推导时,不需要指定类型,如(a)->System.out.println(a)

        当只有一个参数且类型可推导时,不强制写(),如a->System.out.println(a)

        参数指定类型时,有括号,如(inta)->System.out.println(a)

        参数可以为空,如()->System.out.println(“hello”)

        body需要用{}包含语句,当只有一条语句时{}可省略

        常见的写法如下:

        (a)->a*a

        (inta,intb)->a+b

        (a,b)->{returna-b;}

        ()->System.out.println(Thread.currentThread().getId())

        函数式接口FunctionalInterface

        概念

        JavaLambda表达式以函数式接口为基础。什么是函数式接口(FunctionalInterface)?简单说来就是只有一个方法(函数)的接口,这类接口的目的是为了一个单一的操作,也就相当于一个单一的函数了。常见的接口如:Runnable,Comparator都是函数式接口,并且都标注了注解@FunctionalInterface。

        举例

        以Thread为例说明很容易理解。Runnable接口是我们线程编程时常用的一个接口,就包含一个方法voidrun(),这个方法就是线程的运行逻辑。按照以前的语法,我们新建线程一般要用到Runnable的匿名类,如下:

        newThread(newRunnable(){

        @Override

        publicvoidrun(){

        System.out.println(Thread.currentThread().getId());

        }

        }).start();

        如果写多了,是不是很无聊,而基于Lambda的写法则变得简洁明了,如下:

        newThread(()->System.out.println(Thread.currentThread().getId())).start();

        注意Thread的参数,Runnable的匿名实现就通过一句就实现了出来,写成下面的更好理解

        Runnabler=()->System.out.println(Thread.currentThread().getId());

        newThread(r).start();

        当然Lambda的目的不仅仅是写起来简洁,更高层次的目的等体会到了再总结。

        再看一个比较器的例子,按照传统的写法,如下:

        Integer[]a={1,8,3,9,2,0,5};

        Arrays.sort(a,newComparator(){

        @Override

        publicintcompare(Integero1,Integero2){

        returno1-o2;

        }

        });

        Lambda表达式写法如下:

        Integer[]a={1,8,3,9,2,0,5};

        Arrays.sort(a,(o1,o2)->o1-o2);

        JDK中的函数式接口

        为了现有的类库能够直接使用Lambda表达式,Java8以前存在一些接口已经被标注为函数式接口的:

        java.lang.Runnable

        java.util.Comparator

        java.util.concurrent.Callable

        java.io.FileFilter

        java.security.PrivilegedAction

        java.beans.PropertyChangeListener

        Java8中更是新增加了一个包java.util.function,带来了常用的函数式接口:

        Function-函数:输入T输出R

        BiFunction-函数:输入T和U输出R对象

        Predicate-断言/判断:输入T输出boolean

        BiPredicate-断言/判断:输入T和U输出boolean

        Supplier-生产者:无输入,输出T

        Consumer-消费者:输入T,无输出

        BiConsumer-消费者:输入T和U无输出

        UnaryOperator-单元运算:输入T输出T

        BinaryOperator-二元运算:输入T和T输出T

        另外还对基本类型的处理增加了更加具体的函数是接口,包括:BooleanSupplier,DoubleBinaryOperator,DoubleConsumer,DoubleFunction,DoublePredicate,DoubleSupplier,DoubleToIntFunction,DoubleToLongFunction,DoubleUnaryOperator,IntBinaryOperator,IntConsumer,IntFunction,IntPredicate,IntSupplier,IntToDoubleFunction,IntToLongFunction,IntUnaryOperator,LongBinaryOperator,LongConsumer,LongFunction,LongPredicate,LongSupplier,LongToDoubleFunction,LongToIntFunction,LongUnaryOperator,ToDoubleBiFunction,ToDoubleFunction,ToIntBiFunction,ToIntFunction,ToLongBiFunction,ToLongFunction。结合上面的函数式接口,对这些基本类型的函数式接口通过类名就能一眼看出接口的作用。

        创建函数式接口

        有时候我们需要自己

      我的位置: 首页 >> Java Lambda 表达式学习笔记

      2018-07-23

      来源:


       
      • 福州华大IT学院
      • 佛山华大校区
      • 北大青鸟厦门华大教育
      • 厦门课工场
      • 福州华大IT学院
      • 地址:福州市仓山区北园路122号
      • 乘车路线:白湖亭、下濂、埔垱
      • 招生电话:0591-87880522????400-9966-370
      • 网址:www.hunt-ers.com
      • 北大青鸟佛山华大校区
      • 地址:广东省佛山市禅城区佛山大道北143号
      • 乘车路线:张槎路口站、白燕公园站、轻工路口站、金沙新城南门站
      • 招生电话:0757-88726000????4006-989-522
      • 网址:www.foshanbdqn.com
      • 北大青鸟厦门华大职业教育学院
      • 地址:厦门市集美区天阳路1-7号
      • 乘车路线:孙厝、永祥花园、第二医院、霞梧路口站
      • 招生电话:0592-5920811????4000-470-150
      • 网址:www.xmbdqn.com
      • 北大青鸟厦门课工场
      • 地址:厦门市集美区天阳路1-7号
      • 乘车路线:孙厝、永祥花园、第二医院、霞梧路口站
      • 招生电话:0592-5920811????4000-470-150
      • 网址:www.xmbdqn.com

      北大青鸟华大校区公众平台

      12334556

      北大青鸟华大校区收款码

      2021澳门六开彩开奖结果