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. Stripe支付对接

    一.由于文档丢失原因,我就直接上代码了. 这个Stripe支付可以支持多个币种,我下面就采用"HDK"来参照支付先上一个支付效果图  提示:先上代码,在说明博主自己理解的流程. 一 ...

  2. oracle官网下载jdk跑不动太慢了,给出快速下载方式mac

    oracle官网下载jdk8跑不动太慢了,给出快速下载方式 之前在oracle官网下载jdk1.8实在速度太慢,只有20K左右的下载速度,有时候甚至不动,最关键的慢也就算了,cookie有效期有限,有 ...

  3. react 表单(受控组件和非受控组件)

    我们知道表单元素与其他的普通DOM元素来说是不一样的,它们保存了自己的一些状态. 我们主要说的就是表单元素中的受控组件和非受控组件. 受控组件就是这个组件的状态是我们(react)控制的,这个组件的行 ...

  4. 【转】Java 正则表达式详解

    正则表达式30分钟入门教程 常用正则表达式 如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单. 如果你不熟悉这个术语,那么“正则表达式”(R ...

  5. Spring Boot2 系列教程 (十四) | 统一异常处理

    如题,今天介绍 SpringBoot 是如何统一处理全局异常的.SpringBoot 中的全局异常处理主要起作用的两个注解是 @ControllerAdvice 和 @ExceptionHandler ...

  6. Graph Transformer Networks 论文分享

    论文地址:https://arxiv.org/abs/1911.06455 实现代码地址:https://github.com/ seongjunyun/Graph_Transformer_Netwo ...

  7. sql中,case when的几种写法

    Province = CASE WHEN DCCity = '商丘' THEN '河南' WHEN DCCity <> '商丘' THEN '非河南' END, case ISNeed w ...

  8. python爬虫——selenium+firefox使用代理

    本文中的知识点: python selenium库安装 firefox geckodriver的下载与安装 selenium+firefox使用代理 进阶学习 搭建开发环境: selenium库 fi ...

  9. 世界上最流行的版本控制系统——Git

    版本控制系统,也就是VCS(Version Control System),可以说是程序员必备的工具.那么它到底是什么,有什么作用呢? 举个例子,如果你想查看你所开发的软件在一个月之前的模样,同时还想 ...

  10. 一道简单到爆 Java面试题,居然挂了一票人

    很多时候bug往往都是出在,我们觉得非常简单,不起眼的基础知识上 年前公司最后一波招人,为年后项目做技术储备,主要招聘对象初中级Java开发,要求也并没有多苛刻,唯一一点基础稍好,快速上手做项目就行. ...