zoukankan      html  css  js  c++  java
  • lambda表达式初体验

    lambda的前提:-----》有一个接口,并且有且只有一个抽象方法  

    1、函数式编程思想

    考虑要做什么,而不是怎么做

    2、初体验

    实现:启动一个线程,控制台输出,线程启动了。。。

    ·~:定义一个类myrunnable实现runnable接口,重写run方法;

    创建myrunnable类对象

    创建thread类对象,把myrunnable的对象作为构造参数传递

    启动线程

    MyRunnable my=new MyRunnable();
    Thread thread = new Thread(my);
    thread.start();

    ·~:匿名内部类的方法

    new Thread(new Runnable() {
    @Override
    public void run() {
    System.out.println("匿名内部类的方法 ");
    }
    }).start();

    ·~:lambda的方法

    new Thread(()->{
    System.out.println(" hhhhh " );
    }).start();

    3、lambda的标准格式
    从匿名内部类中,看出重写run方法。
    ·~:方法形式为空,说明调用方法不需要传递参数
    ·~:方法返回值类型为void,说明没有方法返回。
    ·~:方法体的内容,是具体要做的事情。
    lambda表达式:()为空,可以当作方法形式参数为空 -》:指向要做的事情 {}包含代码块,可以当作方法体中的内容。
    格式:(形式参数)->{代码块}

    useAddable((int x,int y)->{
    return x+y;
    });
    参数类型可以省略,但是多个参数的情况下,不能只省略一个。如果参数有且仅有一个,那么小括号可以省。如果代码块的语句只有一句,可以省略大括号和分号。
    如果有return,那么return也要省略。。
    useAddable((x, y)->{
    return x+y;
    });useAddable(x->{
       return x;
    });
    useAddable(x->x);
    注意:::::
    1、使用lambda必须有接口,并且要求接口中有且仅有一个抽象方法
    2、必须有上下文环境,才能推到出lambda对应的接口
      根据局部变量的赋值得知lambda对应的接口:Runnbler=()-》system.out.printly('lambda')
      根据调用方法的参数得知lambda对应的接口:new thred(()-》system.out.printly('lambda').start();
    匿名内部类和lambda的区别

    所需类型不同:
    ·~:匿名内部类,可以是接口,也可以是抽象类,还可以是具体类
    ·~:只能是接口
    使用限制不同
    ·~:如果接口中有且仅有一个抽象方法,可以使用lambda,也可以匿名内部类
    ·~:接口多于1个,就只能匿名内部类,不能lambda表达式。。


  • 相关阅读:
    一个简易的四则运算单元...(15.12.15 BUG更新)
    转一个PDevMode格式属性说明...
    正则表达式语法
    模拟键盘发送文字
    一个修改过简化版的InputQuery
    获取进程列表的单元
    获取EMF文件内全部文字, 并按照左上到右下的顺序排序
    非主窗体在任务栏显示按钮
    禁用窗体关闭按钮
    一个支持FMX.Win框架的托盘控件
  • 原文地址:https://www.cnblogs.com/xiangyucc/p/13644609.html
Copyright © 2011-2022 走看看