您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

Lamdba表达式一篇足够

时间:2019-08-08 12:05:59  来源:  作者:
Lamdba表达式一篇足够

 

 

一、概述

1、是什么

Lambda表达式是一个匿名函数,即没有函数名的函数。也可以理解成是一段可以传递的代码(将代码像数据一样进行传递),这样一来代码更加简洁。

2、为什么

  • 代码简洁
  • 可能还有一些优化,但是目前没研究,研究到的时候再来补充。

二、语法组成

param -> body

1.中间以 -> 隔开形成左右两部分。我们称->为箭头操作符。2.表达式左边:Lambda表达式的参数列表。3.表达式右边:Lambda表达式中所需执行的功能,即Lambda体。

三、语法格式

1、无参无返回

方法没参数且没返回值,比如public void test() {System.out.println("hello")},用lambda表达式,首先看我们的Lambda组成公式:param -> body。无参就用()代替,那么就是() -> body,方法体是输出语句,所以:() -> System.out.println("hello"),别问我方法名称在哪?第一个就说了,匿名函数,即没有函数名的函数。

2、一参无返回

方法有一个参数且没返回值,比如:public void test(int a) {System.out.println(a)},用lambda表达式,首先看我们的Lambda组成公式:param -> body。有参数就放到()里就行了,那么就是(int a) -> System.out.println(a)

值得注意的是:1.若参数只有一个,则我们可以省略小括号,如下:int a -> System.out.println(a)2.我们可以省略参数类型,因为jdk会为我们自动推断。如下:a -> System.out.println(a)

3、多参无返回

方法有一个以上参数且没返回值,比如:public void test(int a, String b) {System.out.println(a + ":" + b)},用lambda表达式,首先看我们的Lambda组成公式:param -> body。有参数就放到()里就行了,那么就是(int a, String b) -> {System.out.println(a + ":" + b)}

值得注意的是:1.若参数只有一个,则我们可以省略小括号,但是一个以上就不能省略了。2.我们可以省略参数类型,因为jdk会为我们自动推断。如下:(a, b) -> {System.out.println(a + ":" + b)}

4、多参有返回

方法有一个以上参数且有返回值,比如:public String test(int a, String b) {return a + ":" + b},用lambda表达式,首先看我们的Lambda组成公式:param -> body。有参数就放到()里就行了,那么就是(int a, String b) -> {return a + ":" + b}

值得注意的是:1.若参数只有一个,则我们可以省略小括号,但是一个以上就不能省略了。2.我们可以省略参数类型,因为jdk会为我们自动推断。如下:(a, b) -> {return a + ":" + b}

5、体只有一条

首先看我们的Lambda组成公式:param -> body。体只有一条的意思是body只有一条语句。多条语句不可省略这种情况下我们可以省略{},且不管你有无返回值都可以省略return。多条语句不可省略。比如:public void test(int a) {System.out.println(a)}会写成: a -> System.out.println(a)比如:public int test(int a) {return a + 100}会写成: a -> a + 100

四、实战演示

1、无参无返回

/**
* 无参无返回,我们以Runnable接口为例,因为Runnable的run()方法就是无参无返回的。
*/
private static void test1() {
 Runnable runnable = new Runnable() {
 @Override
 public void run() {
 System.out.println("test1");
 }
 };
 runnable.run();
}
public static void main(String[] args) {
 test1();
 /**
 * lambda的方式重写无参无返回。
 * 说明一下:这里的无参无返回指的是Runnable接口的run方法无参无返回,至于细节问题,先不管,下一章节你秒懂。
 * 现在你只需要知道lambda真的很简单!
 */
 Runnable runnable = () -> System.out.println("test1");
 runnable.run();
}

2、一参无返回

/**
* 一参无返回
*/
private static void test2(int a) {
 System.out.println("a=" + a);
}
public static void main(String[] args) {
 test2(1);
 /**
 * lambda的方式重写一参无返回。
 * 说明一下:这里的无参无返回指的是Consumer接口的accept方法一参无返回,你会问Consumer是什么,先不管,下一章节你秒懂。
 * 现在你只需要知道lambda真的很简单!
 */
 Consumer<Integer> consumer = (a) -> System.out.println("a=" + a);
 consumer.accept(1);
 //---------------------------一参可省略小括号-----------------------------------//
 Consumer<Integer> consumer2 = a -> System.out.println("a=" + a);
 consumer2.accept(1);
}
// 多参无返回同理,不写了。,直接搞多参有返回吧

3、多参有返回

public static void main(String[] args) {
 /**
 * 多参有返回,这里拿比较接口来做案例
 */
 Comparator<Integer> comparator2 = new Comparator<Integer>() {
 @Override
 public int compare(Integer o1, Integer o2) {
 System.out.println("多参有返回");
 return Integer.compare(o1, o2);
 }
 };
 /**
 * lambda的方式重写多参有返回。
 * 说明一下:这里的多参无返回指的是Comparator接口的compare方法多参有返回,细节先不管,下一章节你秒懂。
 * 现在你只需要知道lambda真的很简单!
 */
 Comparator<Integer> comparator = (a, b) -> {
 // 需要注意的是:body多行,{}不能省略。
 System.out.println("多参有返回");
 return a.compareTo(b);
 };
}

五、总结

本章要学会以下东西

  • 什么是lambda
  • 为什么用lambda
  • lambda语法组成
  • lambda语法格式
  • 并不要求你会用
  • 要明白真的节省代码,如下:对接口的创建匿名内部类的实现时,只需一句话,比如:
Runnable r = () -> System.out.println("hello");

而具体什么样的接口能用lambda呢?我们随便写个interface的话可以用吗?显然不行,这就引人深思了,为什么案例中的Runnable和Comparator接口都可以用lambda替代其内部类的实现?小伙伴们你们觉得可以代替吗?尽情吧答案评论在下方吧。



Tags:Lamdba表达式   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
一、概述1、是什么Lambda表达式是一个匿名函数,即没有函数名的函数。也可以理解成是一段可以传递的代码(将代码像数据一样进行传递),这样一来代码更加简洁。2、为什么 代码简...【详细内容】
2019-08-08  Tags: Lamdba表达式  点击:(247)  评论:(0)  加入收藏
▌简易百科推荐
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  大数据架构师    Tags:架构   点击:(5)  评论:(0)  加入收藏
前言 单片机开发中,我们往往首先接触裸机系统,然后到RTOS,那么它们的软件架构是什么?这是我们开发人员必须认真考虑的问题。在实际项目中,首先选择软件架构是非常重要的,接下来我...【详细内容】
2021-12-23  正点原子原子哥    Tags:架构   点击:(7)  评论:(0)  加入收藏
现有数据架构难以支撑现代化应用的实现。 随着云计算产业的快速崛起,带动着各行各业开始自己的基于云的业务创新和信息架构现代化,云计算的可靠性、灵活性、按需计费的高性价...【详细内容】
2021-12-22    CSDN  Tags:数据架构   点击:(10)  评论:(0)  加入收藏
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  蜗牛学苑    Tags:微服务   点击:(9)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  青锋爱编程    Tags:后台架构   点击:(21)  评论:(0)  加入收藏
在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四...【详细内容】
2021-12-14  架构即人生    Tags:连接池   点击:(17)  评论:(0)  加入收藏
随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成本,从而使得各大生产厂商...【详细内容】
2021-12-08  架构驿站    Tags:分布式系统   点击:(23)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  大数据架构师    Tags:Netty   点击:(17)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  人月聊IT    Tags:架构   点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  GreekDataGuy  CSDN  Tags:单体应用   点击:(35)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条