快速了解Lambda表达式-Java
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的更多相关文章
- java8 快速入门 lambda表达式 Java8 lambda表达式10个示例
本文由 ImportNew - lemeilleur 翻译自 javarevisited.欢迎加入翻译小组.转载请见文末要求. Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发 ...
- 初探Lambda表达式/Java多核编程【1】从集合到流
从集合到流 接上一小节初探Lambda表达式/Java多核编程[0]从外部迭代到内部迭代,本小节将着手使用"流"这一概念进行"迭代"操作. 首先何为" ...
- 初探Lambda表达式/Java多核编程【2】并行与组合行为
今天又翻了一下书的目录,第一章在这之后就结束了.也就是说,这本书所涉及到的新的知识已经全部点到了. 书的其余部分就是对这几个概念做一些基础知识的补充以及更深层次的实践. 最后两个小节的内容较少,所以合 ...
- 初探Lambda表达式/Java多核编程【3】Lambda语法与作用域
接上一篇:初探Lambda表达式/Java多核编程[2]并行与组合行为 本节是第二章开篇,前一章已经浅显地将所有新概念点到,书中剩下的部分将对这些概念做一个基础知识的补充与深入探讨实践. 本章将介绍L ...
- 初探Lambda表达式/Java多核编程【4】Lambda变量捕获
这周开学,上了两天感觉课好多,学校现在还停水,宿舍网络也还没通,简直爆炸,感觉能静下心看书的时间越来越少了...寒假还有些看过书之后的存货,现在写一点发出来.加上假期两个月左右都过去了书才看了1/7都 ...
- Linq快速入门——Lambda表达式的前世今生
Linq快速入门——Lambda表达式的前世今生 Lambda表达式其实并不陌生,他的前生就是匿名函数,所以要谈Lambda表达式,就不得不谈匿名函数,要谈匿名函数,那又要不得不谈委托. 何为委托 ...
- 初探Lambda表达式/Java多核编程【0】从外部迭代到内部迭代
开篇 放假前从学校图书馆中借来一本书,Oracle官方的<精通Lambda表达式:Java多核编程>. 假期已过大半才想起来还没翻上几页,在此先推荐给大家. 此书内容及其简洁干练,如果你对 ...
- Java 8 Lambda表达式10个示例【存】
PS:不能完全参考文章的代码,请参考这个文件http://files.cnblogs.com/files/AIThink/Test01.zip 在Java 8之前,如果想将行为传入函数,仅有的选择就是 ...
- 【Java学习笔记之三十一】详解Java8 lambda表达式
Java 8 发布日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Java 8之前 ...
随机推荐
- 【笔记】java并发编程实战
线程带来的问题:a)安全性问题b)活跃性问题c)性能问题 要编写线程安全的代码其核心在于要对状态访问操作进行管理,特别是对共享的和可变的状态的访问 Java中的主要同步机制是关键字synchroniz ...
- 【聚类评价】Calinski-Harabaz(CH)
Calinski-Harabaz(CH) CH指标通过计算类中各点与类中心的距离平方和来度量类内的紧密度,通过计算各类中心点与数据集中心点距离平方和来度量数据集的分离度,CH指标由分离度与紧密度的比值 ...
- Java入门 - 语言基础 - 21.Scanner类
原文地址:http://www.work100.net/training/java-scanner.html 更多教程:光束云 - 免费课程 Scanner类 序号 文内章节 视频 1 概述 2 使用 ...
- Java单体应用 - 开发工具 - 02.Maven
原文地址:http://www.work100.net/training/monolithic-tools-maven.html 更多教程:光束云 - 免费课程 Maven 序号 文内章节 视频 1 ...
- GeoGebra学习-lesson1
我曾经想过学习数学的时候总觉得不太直观,希望通过直观的图形来直观的学习数学.庆幸的是,在B站看视频时看到了妈咪叔使用了这款数学软件,很好用的样子.就去简单的了解了一下,下面是摘抄自<Geogeb ...
- tensorboard网络结构
一.tensorboard网络结构 import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_data ...
- Mysql梳理-关于索引/引擎与锁
前言 最近突发新型肺炎,本来只有七天的春节假期也因为各种封锁延长到了正月十五,在家实在闲的蛋疼便重新研究了一下Mysql数据库的相关知识,特此总结梳理一下.本文主要围绕以下几点进行: 1.Mysql的 ...
- OpenCV2.4.13+VS2013配置方法
先说一下vc几代表的对应版本: vc8 = Visual Studio 2005 vc9 = Visual Studio 2008 vc10 = Visual Studio 2010 vc11 = V ...
- 请求参content-type的值为json,返回报错的解决方法
如上图,请求后报参数错误 原因content-type的值为json requests.post左侧的data要改为json 即r = requests.post(url, json=data, he ...
- Mybatis基础(一)
mybatis概述: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis ...