lambda表达式

前言

最近因为疫情,也不能正常返校什么的,希望大家都能好好的,希望武汉加油,中国加油,在家也看了很多视频,学了一点新的东西,虽然懒惰,但是也要努力啊。今天记录分享Lambda表达式的知识。

Lambda表达式是JDK8新增的特性 下面的图就是JDK8的新特性,JDK5和JDK8相对来说都是比较重要有的Java版本。

所以学习使用其中的新特性也是比较重要的。

简介

Lambda表达式指的是应用在单一抽象方法接口环境下的一种简化定义形式,可以用来解决匿名内部类的定义复杂问题。
今天这篇讲的是lambda表达式,它是一种新的语法规则。它是一种匿名函数,简单地说,它是没有声明的方法,也即没有访问修饰符、返回值声明和名字。它可以写出更简洁、更灵活的代码。作为一种更紧凑简洁的代码风格,使 Java 语言的表达能力得到了提升。

简单入门

interface Message {
public void print();
} public class TestDemo {
public static void main(String[] args){
//lambda表达式,这里是覆写接口中的print方法
fun() -> System.out.println("hello world");
//原来的写法
// fun(new Message(){
// @Override
// public void print)() {
// System.out.println("hello world");
//}
//});
}
public static void print(Message msg){
msg.print();
}
}

用法

  • Lambda的基本语法如下

(参数) -> 方法体/lambda体
解析:
左边是成员列表/形参列表(有时就是接口中的抽象方法的方法引用)
右边的方法体是要重写的抽象方法的方法体
-> 是操作符,也叫做lambda箭头操作符
  • 简单示例

// 1. 不需要参数,返回值为
() -> 1 // 2. 接收一个参数(数字类型),返回其2倍的值
x -> 2 * x // 3. 接受2个参数(数字),并返回他们的差值
(x, y) -> x – y // 4. 接收2个int型整数,返回他们的和
(int x, int y) -> x + y // 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
(String s) -> System.out.print(s)
  • 具体使用方法/写法-一共可以分为六种情况去写。

/**
* @Author: yhy
* @Time: 22:37
* 用来测试使用lambda语句
*/
public class LambdaDemo {
// -> lambda操作符 // 情况一:无参且无返回值
@Test
public void test1() {
// 原来的写法
Runnable r0 = new Runnable() {
@Override
public void run() {
System.out.println("abc");
}
}; // lambda写法
Runnable r = () -> System.out.println("abc");
r.run();
} //情况二 需要一个参数,但没有返回值
// 原始写法
Consumer<String> con = new Consumer<>() {
@Override
public void accept(String s) {
System.out.println(s);
} }; // lambda写法
Consumer<String> con2 = (String s) -> {
System.out.println(s);
}; //情况三:数据类型省略,可推断出类,又叫做类型推断 前面已经知道是string类型了
// 所以这里直接省略了后面的括号的string类型说明
// 和泛型的格式很像,可以省略后面的类型说明
Consumer<String> con3 = (s) -> {
System.out.println(s);
}; // 情况四:一个参数的时候, 括号可以不写 下面的s就是一个参数
@Test
public void test2() {
Consumer<String> con4 = s -> {
System.out.println(s);
};
con4.accept("abcdefg");
} // 情况五:需要两个或者以上的参数,且方法中多条执行语句,并且有返回值
@Test
public void test3() {
// 原来的写法
Comparator<Integer> com = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
System.out.println(o1);
System.out.println(o2);
return o1.compareTo(02);
}
};
System.out.println(com.compare(13,15));
// lambda表达式
System.out.println("------------------");
Comparator<Integer> com2 =(o1,o2) -> {
return o1.compareTo(02);
};
System.out.println(com2.compare(14,12));
}
// 情况六:当lambda只有一条语句时候,可以在lambda体中省略括号和return
@Test
public void test4(){
// 原来的写法
Comparator<Integer> com1 = (o1,o2) -> {return o1;};
}
// lambda规则六表达式写法
Comparator <Integer> com2 = (o1, o2) -> o1;
}

好处

能够简洁,快速写代码,看的出代码量差别,但是有一说一,有时不会很好懂,但是看得懂还是最基本的要求。

总结

表达式的左边:Lambda形参列表的参数类型可以省略,如果只有一个参数的时候,也可以省略括号

表达式的右边:Lambda体,一对{}包裹着,只有一条执行语句的时候,也可以省略大括号,若有返回值,省略的时候也可以省略return

最后,以前用匿名内部类的地方都可以使用Lambda表达式类代替.

这一篇文字没写多少,因为我觉得学的太慢了,不能浪费太多时间在做博客上,所以以记录分享为主,菜鸟一枚,加油,共勉!

快速了解Lambda表达式-Java的更多相关文章

  1. java8 快速入门 lambda表达式 Java8 lambda表达式10个示例

    本文由 ImportNew - lemeilleur 翻译自 javarevisited.欢迎加入翻译小组.转载请见文末要求. Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发 ...

  2. 初探Lambda表达式/Java多核编程【1】从集合到流

    从集合到流 接上一小节初探Lambda表达式/Java多核编程[0]从外部迭代到内部迭代,本小节将着手使用"流"这一概念进行"迭代"操作. 首先何为" ...

  3. 初探Lambda表达式/Java多核编程【2】并行与组合行为

    今天又翻了一下书的目录,第一章在这之后就结束了.也就是说,这本书所涉及到的新的知识已经全部点到了. 书的其余部分就是对这几个概念做一些基础知识的补充以及更深层次的实践. 最后两个小节的内容较少,所以合 ...

  4. 初探Lambda表达式/Java多核编程【3】Lambda语法与作用域

    接上一篇:初探Lambda表达式/Java多核编程[2]并行与组合行为 本节是第二章开篇,前一章已经浅显地将所有新概念点到,书中剩下的部分将对这些概念做一个基础知识的补充与深入探讨实践. 本章将介绍L ...

  5. 初探Lambda表达式/Java多核编程【4】Lambda变量捕获

    这周开学,上了两天感觉课好多,学校现在还停水,宿舍网络也还没通,简直爆炸,感觉能静下心看书的时间越来越少了...寒假还有些看过书之后的存货,现在写一点发出来.加上假期两个月左右都过去了书才看了1/7都 ...

  6. Linq快速入门——Lambda表达式的前世今生

    Linq快速入门——Lambda表达式的前世今生   Lambda表达式其实并不陌生,他的前生就是匿名函数,所以要谈Lambda表达式,就不得不谈匿名函数,要谈匿名函数,那又要不得不谈委托. 何为委托 ...

  7. 初探Lambda表达式/Java多核编程【0】从外部迭代到内部迭代

    开篇 放假前从学校图书馆中借来一本书,Oracle官方的<精通Lambda表达式:Java多核编程>. 假期已过大半才想起来还没翻上几页,在此先推荐给大家. 此书内容及其简洁干练,如果你对 ...

  8. Java 8 Lambda表达式10个示例【存】

    PS:不能完全参考文章的代码,请参考这个文件http://files.cnblogs.com/files/AIThink/Test01.zip 在Java 8之前,如果想将行为传入函数,仅有的选择就是 ...

  9. 【Java学习笔记之三十一】详解Java8 lambda表达式

    Java 8 发布日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Java 8之前 ...

随机推荐

  1. 配置ca服务器和http,mail加密

    一·CA介绍 certificate authority   数字证书授权中心 被通信双方信任的.独立的第三方机构 负责证书颁发.验证.撤销等管理 数字证书 经证书授权中心数字签名的包含公开密钥拥有者 ...

  2. Python3-Selenium自动化测试框架(二)之selenium使用和元素定位

    Selenium自动化测试框架(二)之selenium使用和元素定位 (一)selenium的简单使用 1.导包 from selenium import webdriver 2.初始化浏览器 # 驱 ...

  3. 条款03:尽可能使用const

    目录 1. 总结 2. const对象 3. const函数返回值和函数参数 4. const成员函数 const成员函数的重要性 bitwise constness logical constnes ...

  4. Friday the Thirteenth 黑色星期五 USACO 模拟 超级简单做法

    1003: 1.1.3 Friday the Thirteenth 黑色星期五 时间限制: 1 Sec  内存限制: 128 MB提交: 8  解决: 8[提交] [状态] [讨论版] [命题人:外部 ...

  5. windows服务搭建(VS2019创建Windows服务不显示安装组件)

    1.创建windows服务应用 2.右键查看代码 3.写个计时器Timer  using System.Timers; 如上图,按tab键快速操作  会自动创建一个委托 改为下边的方式,打印日志来记录 ...

  6. Maven 基础环境搭建 项目依赖jar包导入

    一.创建一个Maven工程 不清楚的话请查阅其它文档. 二.引入项目依赖的jar包 1.Spring 2.SpringMvc 3.Mybatis 4. 数据库连接池,驱动 5.其它(jstl.serv ...

  7. 让你的 Linux 命令骚起来

    目录 管道符号 " | " grep sed awk sort comm uniq tr cat head tail wc find tsort tee 「>」重定向符号 「 ...

  8. pandas DF去重

    实例 import pandas as pd data=pd.DataFrame({'产品':['A','A','A','A'],'数量':[50,50,30,30]}) 去重 data.drop_d ...

  9. mysql 添加/删除列(column)

    1.添加 格式:alter table 表名 add column 列名 列的数据类型;示例alter table test4 add column addr text; 2.删除 格式: alter ...

  10. 客户端TNSPING通 连接出现ORA-12514错误

    ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务,这是一个经常遇到的问题,可以按照以下步骤一步步解决 1.使用tnsping检测 tnsping可判断出以下两点(1)判断网络 ...