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. Win10下设置默认输入法与默认中文输入

    实现的效果: 把自己需要的一个或多个输入法软件添加到输入法列表中(一般就指定一个),避免了需要在打字时Ctrl + Shift等快捷键在多个输入法中不停切换的麻烦 首选语言默认为中文,毕竟作为一个中国 ...

  2. Spark学习笔记(二)—— Local模式

    Spark 的运行模式有 Local(也称单节点模式),Standalone(集群模式),Spark on Yarn(运行在Yarn上),Mesos以及K8s等常用模式,本文介绍第一种模式. 1.Lo ...

  3. makefile个人理解

    makefile makefile抽象层面的理解 学习某一样东西之前一定要明确学习的目的,即学习了这项工具能解决一些什么问题,其优势是什么? makefile的优势就是能够动态根据文件的新旧来决定是否 ...

  4. JWT(二):使用 Java 实现 JWT

    JWT(一):认识 JSON WebToken JWT(二):使用 Java 实现 JWT 介绍 原理在上篇<JWT(一):认识 JSON Web Token>已经说过了,实现起来并不难, ...

  5. UGUI之MaskableGraphic

    MaskableGraphic继承自Graphic,并且继承了IClippable, IMaskable, IMaterialModifier三个接口.它是RawImage.Image和Text的父类 ...

  6. 小程序和wepy做循环渲染如何点击拿到相对应的值

    数据和其他的就忽略,简单上手,wepy的for渲染方式改成对应的就行,传参触发不用改 <view wx:for="{{list}}"> {{item.title}} & ...

  7. input 只允许输入小数

    oninput = "value=value.replace(/[^\d]/g,'')" 输入浮点数不好使 突发奇想自己写一个与众不同的... oninput="valu ...

  8. 一个DNS数据包的惊险之旅

    踏上旅程 “小子,快去查一下www.paypal.com的IP地址,我急用,晚了我弄你!”,暴躁老哥一把关上了门,留我一个DNS数据包在冷冰冰的房间. 过了一会儿,一位大叔打开了门,带着我来到了一座叫 ...

  9. Python线程-死锁

    死锁产生的4个必要条件:    1.互斥:一个资源同一时刻只允许一个线程进行访问.    2.占有未释放:一个线程占有资源,且没有释放资源.    3.不可抢占:一个已经占有资源的线程无法抢占到其他线 ...

  10. Oracle GoldenGate 12.3微服务架构指北

    Microservices Architecture introduction Microservices Architecture is a method or approach to develo ...