首页 > 其他分享 >Lambda表达式

Lambda表达式

时间:2022-12-26 12:35:12浏览次数:35  
标签:省略 public Lambda class 表达式 形式参数

函数式思想

尽量忽略面向对象的复杂语法,强调做什么,而不是以什么形式去做。

Lambda表达式

就是函数是思想的体现


案例1
这是一段多线程要执行的内容:

public class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("今天晚上真冷啊");
    }
}

这是测试类:

public class Demo {
    public static void main(String[] args) {
        MyRunnable mr = new MyRunnable();
        Thread t = new Thread(mr);
        t.start();        
    }
}

运行结果:

今天晚上真冷啊

案例2
测试类(匿名内部类方式):

public class Demo {
    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("今天真饿啊");
            }
        }).start();
    }
}

运行结果:

今天真饿啊

案例3
测试类(匿名内部类Lambda表达式写法):

public class Demo {
    public static void main(String[] args) {
        new Thread(()->{
            System.out.println("今天要洗澡");
        }).start();
    }
}

运行结果:

今天要洗澡

Lambda表达式三要素

组成Lambda表达式的三要素:形式参数箭头代码块

  • () 里面没有内容,可以看成方法形式参数为空
  • -> 指向要做的事情
  • {} 要执行的代码

格式

格式:(形式参数) -> {代码块}

  • 形式参数:如果有多个形式参数,参数之间用逗号隔开;如果没有就空着

使用前提

Lambda表达式的使用前提

  • 有一个接口
  • 接口中有,且只有一个抽象方法
  • 必须有上下文环境,才能推导出Lambda表达式对应的接口

Lambda表达式的省略

  • 只有一个形式参数时,参数类型可以省略;()也可以省略
  • 参数类型可以省略,但多个参数时,不能只省略某一个
  • 如果{}中只有一条不带return的语句时,句末的分号和{}都可以省略
  • 如果{}中只有一条带return的语句时,句末的分号和{}都可以省 略,return也可以省略

Lambda表达式和匿名内部类的区别

  1. 所需类型不同
  • 匿名内部类:可以是接口,也可以是抽象类,还可以是具体类
  • Lambda表达式:只能是接口
  1. 使用限制不同
  • 如果接口中有且只有一个抽象方法,可以使用Lambda表达式,也可以使用匿名内部类
  • 如果接口中多于一个抽象方法,只能使用匿名内部类,不能使用Lambda表达式
  1. 实现原理不同
  • 匿名内部类编译之后,产生一个单独的.class字节码文件
  • Lambda表达式编译之后,没有一个单独的.class字节码文件。对应的字节码会在运行的时候动态生成

标签:省略,public,Lambda,class,表达式,形式参数
From: https://www.cnblogs.com/chawaner/p/17005530.html

相关文章

  • 【编程基础】正则表达式基本使用及在Python中使用正则表达式匹配内容
    前言当接触一个新知识点或者技术时,只要问完哲学中的三大问题,基本就对这个知识点或者技术有大致的了解,这也是我学习一个新技术常用的方法,那到底是哪三大问题呢?是什么?怎么做,为......
  • C++ sort函数中利用lambda进行自定义排序规则
    在c++中,由于sort()函数默认提供的是由小到大的排序方式,因此有时候我们需要自定义排序规则来实现由大到小的排序。一维vector<>排序#include<bits/stdc++.h>usingnam......
  • linux 中sed -r选项 支持扩展正则表达式
     001、[liujiaxin01@PC1test]$lsa.txt[liujiaxin01@PC1test]$cata.txt##测试数据##xxxyy##dddss##kkkqqq##mmnn1......
  • 栈实现表达式求值
    使用键盘输入数学表达式(含数字,四种运算符+、-、、/和小括号,其中运算数都是一位数(0~9)),将数学表达式转化成后缀表达式输出,利用后缀表达式求表达式的值并输出。输入格式:输......
  • EL表达式
    EL表达式El表达式是什么?ExpressionLanguage(表达式语言)EL表达式归属于JSP为什么要有EL表达式?EL表达式可以代替JSP中的java代码,让jsp文件中的程序更加整洁美观......
  • C#正则表达式提取HTML中IMG标签的SRC地址
    一般来说一个HTML文档有很多标签,比如“<html>”、“<body>”、“<table>”等,想把文档中的img标签提取出来并不是一件容易的事。由于img标签样式变化多端,使提取的时候......
  • 有了这25个正则表达式,代码效率提高80%
    本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。前言大家好,我是林三心,在日常开发中,正则表达式是非常有用的,正则表达式在每个语言中都是可以使用的,他就跟JSON一......
  • 关于 SQL 中的 CASE 表达式,你都知道那些妙用?
    CASE表达式的妙用1.前言CASE表达式是从SQL-92标准开始被引入的。在CASE表达式里,可以使用BETWEEN、LIKE和<、>等便利的谓词组合,以及能嵌套子查询的IN和EX......
  • 手撕正则表达式
    我们先撕简单的。aaba|baa*a(a|b)*先不管匹配任意字符的.重复>=1次的+[^0-9]除0-9外\digit数字等。正则表达式(regularexpression,re)为啥叫表达式,不叫正则字符......
  • 手机号码正则表达式输入框失去焦点验证
    <!--手机号码正则表达式输入框失去焦点验证--><inputonblur="this.reg=/^1\d{10}$/;/*修改正则表达式即可*/if(!this.reg.test(this.value)){this.value='';this.placehold......