zoukankan      html  css  js  c++  java
  • Java8的lambda表达式入门

    我也是个小白,各位倘若看到一定要带思考去看。

     

    一、背景

    lambda表达式使用的前提:函数式接口的实现,格式大致为

    (形参列表)->{实现代码}

    1.用于接口的实现

    2.接口中只有一个方法

    @FunctionalInterface 注解用于标记这是一个函数式接口

     

    二、应用过程

    1.在一开始我们书写了一个函数式接口Watch

     

     2.接口的一个实现类Book

     

     3.通常情况下,我们通过实现类运行该方法。

     

    4.注释掉步骤3的方法,改用匿名内部类的方式书写。

     

    运行结果如下:

     

     

     5.此时提醒我们可以采用lambda方式来书写代码

     

    点击后即为下面的形式:

     

     

    三、书写lambda表达式

    1.复制上面的匿名内部类代码

    new WacthSome(){
    @Override
    public void wacthSth() {
    System.out.println("now : watch noName");
    }
    }
    .wacthSth();

    对比lambda代码

    ( (WacthSome) () -> System.out.println("now : watch noName") )
    .wacthSth();

    可以看到,在lambda表达式中保留了形参列表部分和方法体部分,对于无关紧要的代码则做了省略。

    如果接口中有多个方法,按照这种省略的格式是无法指明对哪个方法进行了重写,这就是为什么要强调函数式接口的原因。

    我们目前可以理解为lambda对类似于匿名内部类方式创建对象的简化 (这是个人理解,后面还写到可以接收函数的返回值)。

    既然要创建对象,那么就需要知道所创建对象的类型,此处即为绿色部分的(WacthSome)。

     

    现在我们尝试开始自己书写这个接口对应的lambda表达式。

    目前我们关注的点有3个:类型、形参、方法体

    A.类型:lambda实现哪个接口?(文末对此有更多分析)

    B.形参:函数式接口中对应方法的形参列表

    C.方法体:...

     

     2.更改接口中的函数的形参

      可以看到所写的lambda报错。

     

     变更所写的lambda,改变()中的内容,程序即可正常运行。

     

     其中()即为形参列表,是可以省略变量类型的,但注意要省略都得省略。

    当然作为形参,名字是可以不同的,此处注意方法的重写(返回类型、形参顺序、形参类型)。

     

    3.为函数添加返回值

      可以看到所写的lambad再次报错

     

     我们在方法体中添加一个符合类型的返回值,表达式再次变为正确。

     

     我们可以接收并输出这个方法的计算结果,可以看到成功显示。

     

    四、进阶

    lambda可以快速实现一个函数式接口,Runnable接口就是一个很好的例子。

     

     编写相关代码

     

     其中的r是可以替换的,直接简写为。

     

    五、其他

    1.在上文中,我们在使用lambda表达式时,(类型)好像时有时无?

    位置不一样

    A.情景一

    ( (WacthSome) () -> System.out.println("now : watch noName") )

    .wacthSth();

    在方法体中,通过lombda表达式()->得到了一个实例(或者带返回值/这个实例调用方法产生了个返回值)。

    但是你并不知道这个实例它究竟是谁,所以需要显式声明类型。

     

    B.情景二

    new Thread(

    () -> {System.out.println("run方法222...");

    }).start();

    这个位置是在形参(Thread的构造函数)中,是默认有类型的。

    在new Thread()的括号中按下ctrl+p可以看到需要的参数列表。

     

     

     

     

     
  • 相关阅读:
    sigpending
    js 动态计算折扣后总价格
    让ie6支持fixed最简单和实用的方法
    jquery提示气泡
    在线API,桌面版,jquery,css,Android中文开发文档,JScript,SQL掌用实例
    三元组表
    B-树
    二叉排序树
    顺序查找
    二分查找
  • 原文地址:https://www.cnblogs.com/yang37/p/12683382.html
Copyright © 2011-2022 走看看