【Java系列】JDK 1.8 新特性之 Lambda表达式

在这里插入图片描述

目录

  • 1、Lambda表达式介绍
  • 2、从匿名类到Lambda转换
  • 3、Lambda表达式 六种语法格式
    • 语法格式一:无参数、无返回值,只需要一个Lambda体
    • 语法格式二:lambda有一个参数、无返回值
    • ​语法格式三:Lambda只有一个参数时,可以省略()
    • 语法格式四:Lambda有两个参数时,并且有返回值
    • 语法格式五:当Lambda体只有一条语句的时候,return和{}可以省略掉
    • 语法格式六:类型推断:数据类型可以省略,因为编译器可以推断得出,成为“类型推断”
  • 系列文章
  • 版本记录

在这里插入图片描述


1、Lambda表达式介绍

Lambda是一个匿名函数,我们可以将Lambda表达式理解为一段可以传递的代码(将代码像数据一样传递)。使用它可以写出简洁、灵活的代码。作为一种更紧凑的代码风格,使java语言表达能力得到提升。

2、从匿名类到Lambda转换

package com.chen.test.JAVA8Features;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class Demo01 {private static Logger log = LoggerFactory.getLogger(Demo01.class);public static void main(String[] args) {Runnable t1 =new Runnable(){@Overridepublic void run(){log.info("我是没有使用Lambda表达式:不简洁");}};Runnable t2 = () -> log.info("我是使用Lambda表达式:简洁、灵活");t1.run();t2.run();}
}

结果:

​19:43:39.303 [main] INFO com.chen.test.JAVA8Features.Demo01 - 我是没有使用Lambda表达式:不简洁、代码多
19:43:39.303 [main] INFO com.chen.test.JAVA8Features.Demo01 - 我是使用Lambda表达式:简洁、灵活

3、Lambda表达式 六种语法格式

Lambda表达式在java语言中引入了一种新的语法元素和操作。
这种操作符号为“->”,
Lambda操作符或箭头操作符,它将Lambda表达式分割为两部分。
左边:指Lambda表达式的所有参数
右边:指Lambda体,即表示Lambda表达式需要执行的功能。

语法格式一:无参数、无返回值,只需要一个Lambda体

package com.chen.test.JAVA8Features;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class Demo02 {private static Logger log = LoggerFactory.getLogger(Demo02.class);public static void main(String[] args) {Runnable t1 = ()-> log.info("Lambda表达式:简洁、灵活,优雅永不过时");t1.run();}
}

22:22:39.125 [main] INFO com.chen.test.JAVA8Features.Demo02 - Lambda表达式:简洁、灵活,优雅永不过时

Process finished with exit code 0

语法格式二:lambda有一个参数、无返回值

package com.chen.test.JAVA8Features;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.util.function.Consumer;public class Demo03 {private static Logger log = LoggerFactory.getLogger(Demo03.class);public static void main(String[] args) {Consumer<String> consumer = new Consumer<String>() {@Overridepublic void accept(String s) {log.info(s);}};consumer.accept("爱与被爱的区别");Consumer<String> consumer1 = (s) -> log.info(s);consumer1.accept("接受爱不一定爱对方,爱一定付出真心爱");}
}

23:03:08.992 [main] INFO com.chen.test.JAVA8Features.Demo03 - 爱与被爱的区别
23:03:09.142 [main] INFO com.chen.test.JAVA8Features.Demo03 - 接受爱不一定爱对方,爱一定付出真心爱

Process finished with exit code 0

​语法格式三:Lambda只有一个参数时,可以省略()

package com.chen.test.JAVA8Features;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.util.function.Consumer;public class Demo04 {private static Logger log = LoggerFactory.getLogger(Demo04.class);public static void main(String[] args) {Consumer<String> consumer = s -> log.info(s);consumer.accept("Lambda只有一个参数时,可以省略()");}
}

23:08:27.295 [main] INFO com.chen.test.JAVA8Features.Demo04 - Lambda只有一个参数时,可以省略()

Process finished with exit code 0

语法格式四:Lambda有两个参数时,并且有返回值

package com.chen.test.JAVA8Features;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.util.Comparator;
​
​
public class Demo05 {private static Logger log = LoggerFactory.getLogger(Demo05.class);public static void main(String[] args) {CompareOldMethod(12,10);findMaxValue(12,10);findMinValue(12,10);}
//    没有使用Lambda表达式比较大小public static void CompareOldMethod(int num1,int num2){Comparator<Integer> comparator = new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {log.info("o1:{}",o1);log.info("o2:{}",o2);return o1 < o2 ? o2 : o1;}};log.info("OldFindMaxValue:{}",comparator.compare(num1,num2));}//    使用lambda表达式public static void findMaxValue(int num1,int num2){Comparator<Integer> comparatorMax = (o1, o2) ->{
​log.info("o1:{}",o1);log.info("o2:{}",o2);return (o1<o2)? o2 :(o1);};
​log.info("findMaxValue:{}",(comparatorMax.compare(num1,num2)));}public static void findMinValue(int num1,int num2){Comparator<Integer> comparatorMin =  (o1, o2) -> {log.info("o1:{}",o1);log.info("o2:{}",o2);return (o1 < o2) ? o1 : o2;};log.info("FindMinValue:{}",comparatorMin.compare(num1,num2));}
}

00:17:10.206 [main] INFO com.chen.test.JAVA8Features.Demo05 - o1:12
00:17:10.206 [main] INFO com.chen.test.JAVA8Features.Demo05 - o2:10
00:17:10.206 [main] INFO com.chen.test.JAVA8Features.Demo05 - OldFindMaxValue:12
00:17:10.315 [main] INFO com.chen.test.JAVA8Features.Demo05 - o1:12
00:17:10.315 [main] INFO com.chen.test.JAVA8Features.Demo05 - o2:10
00:17:10.315 [main] INFO com.chen.test.JAVA8Features.Demo05 - findMaxValue:12
00:17:10.315 [main] INFO com.chen.test.JAVA8Features.Demo05 - o1:12
00:17:10.315 [main] INFO com.chen.test.JAVA8Features.Demo05 - o2:10
00:17:10.315 [main] INFO com.chen.test.JAVA8Features.Demo05 - FindMinValue:10

Process finished with exit code 0

语法格式五:当Lambda体只有一条语句的时候,return和{}可以省略掉

package com.chen.test.JAVA8Features;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.util.Comparator;
​
​
public class Demo05 {private static Logger log = LoggerFactory.getLogger(Demo05.class);public static void main(String[] args) {findMaxValue(12,10);findMinValue(12,10);}//    使用lambda表达式public static void findMaxValue(int num1,int num2){Comparator<Integer> comparatorMax = (o1, o2) ->{
​log.info("o1:{}",o1);log.info("o2:{}",o2);return (o1<o2)? o2 :(o1);};
​log.info("findMaxValue:{}",(comparatorMax.compare(num1,num2)));}public static void findMinValue(int num1,int num2){Comparator<Integer> comparatorMin =  (o1, o2) -> (o1 < o2) ? o1 : o2;
​log.info("FindMinValue:{}",comparatorMin.compare(num1,num2));}
}

00:22:31.059 [main] INFO com.chen.test.JAVA8Features.Demo05 - o1:12
00:22:31.075 [main] INFO com.chen.test.JAVA8Features.Demo05 - o2:10
00:22:31.075 [main] INFO com.chen.test.JAVA8Features.Demo05 - findMaxValue:12
00:22:31.075 [main] INFO com.chen.test.JAVA8Features.Demo05 - FindMinValue:10

Process finished with exit code 0

语法格式六:类型推断:数据类型可以省略,因为编译器可以推断得出,成为“类型推断”


package com.chen.test.JAVA8Features;import com.mysql.cj.callback.MysqlCallbackHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.function.Consumer;
​
​
public class Demo07 {private static Logger log = LoggerFactory.getLogger(Demo07.class);public static void main(String[] args) {dateType();}public static void dateType(){Consumer<String> consumer = (String s) -> log.info(s);consumer.accept("Hello World !");Consumer<String> consumer1 = (s) -> log.info(s);consumer1.accept("Hello don't date type !");}
}

系列文章


内容地址 链接
JAVA面试常见问题
JAVA面试Spring知识点
JAVA面试Mysql
JAVA面试Redis常见问题
JAVA面试MongoDB
JAVA介绍Linux (实战)常用命令
=========================================================================
👊如果你对该系列文章有兴趣的话,欢迎持续关注博主动态,博主会持续输出优质内容👊

👊 博主很需要大家的支持,你的支持是我创作的不竭动力👊

👊 ~ 点赞收藏+关注 ~👊
=========================================================================

版本记录


  • 2023-10-18 第一版

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2799352.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

golang通过http访问外部网址

不同项目之前,通过http访问,进行数据沟通 先设定一个接口,确认外部能访问到 PHP写一个接口 public function ceshi_return() {$data $this->request->param();$id $data[id];$res Db::name(user)->field(id,status,price,name)->where([id>$id])->find…

eclipse做NC开发选择nchome后,测试连不通

在bin文件下的config.bat里却又能够连通数据库&#xff0c;在eclipse却不行。 可能是jdk选择的问题&#xff0c;把jdk改成home自带的jdk

【关于深度学习的一些资料】

曾梦想执剑走天涯&#xff0c;我是程序猿【AK】 目录 动手学深度学习Awesome Deep LearningTensorFlow Official ModelsPyTorch Image ModelsDeep Reinforcement LearningNeural Style Transfer 动手学深度学习 动手学深度学习 https://zh.d2l.ai/chapter_installation/index.…

嵌入式学习-qt-Day2

嵌入式学习-qt-Day2 一、思维导图 二、作业 1.使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 2.将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账…

小程序--引入vant组件库

一、npm初始化 在微信开发者工具中打开终端&#xff0c;输入npm init&#xff0c;对npm进行初始化 二、安装vant组件库 npm install vant/weapp 三、修改app.json 修改 app.json&#xff0c;移除全局配置 "style": "v2"&#xff0c;否则 Vant 组件的样式…

记一次 .NET某列控连锁系统 崩溃分析

一&#xff1a;背景 1. 讲故事 过年喝了不少酒&#xff0c;脑子不灵光了&#xff0c;停了将近一个月没写博客&#xff0c;今天就当新年开工写一篇吧。 去年年初有位朋友找到我&#xff0c;说他们的系统会偶发性崩溃&#xff0c;在网上也发了不少帖子求助&#xff0c;没找到自…

Android 浅色皮肤阴影开发

前言&#xff1a;项目中要进行浅色皮肤开发&#xff0c;然后要求要有阴影效果&#xff0c;下面是UI觉得可行的中立方案效果 尝试一、使用elevation添加阴影发现效果一般 尝试二、使用带阴影的UI切图后续发现成本太大&#xff0c;对后续多个皮肤适配要求太大 尝试三、使用elevat…

Adobe将类ChatGPT集成到PDF中

2月21日&#xff0c;全球多媒体巨头Adobe在官网宣布&#xff0c;推出生成式AI助手AI Assistant&#xff0c;并将其集成在Reader 和Acrobat 两款PDF阅读器中。 据悉&#xff0c;AI Assistant的功能与ChatGPT相似&#xff0c;可以基于PDF文档提供摘要、核心见解、基于文档内容&a…

CSS 函数详解url、min、rgb、blur、scale、rotate、translate等

随着技术的不断进步&#xff0c;CSS 已经从简单的样式表发展成为拥有众多内置函数的强大工具。这些函数不仅增强了开发者的设计能力&#xff0c;还使得样式应用更加动态、灵活和响应式。本文将深入探讨 CSS 常见的 66 个函数&#xff0c;逐一剖析它们的功能和用法&#xff0c;一…

乡镇街道档案包括哪些内容

乡镇街道档案是指记录乡镇街道行政区域内的各种信息、数据和文献资料的档案。乡镇街道档案通常包括以下内容&#xff1a; 1. 行政管理档案&#xff1a;包括乡镇街道的组织机构、人员编制、管理制度等方面的档案资料。 2. 经济发展档案&#xff1a;记录乡镇街道的经济发展情况&a…

一个简单的mysql绕过

一、环境代码 上一个环境的demo文件 二、ctf技巧 代码先进入&#xff0c;到chr转换为英文&#xff0c;之后连接到hehe后面&#xff0c;假设我连接了一个&#xff0c;接下来就回去demo中查找hehe&#xff0c;如果name是hehe就输出&#xff0c;意思就是只认前面的hehe后面的会被…

Nginx----高性能的WEB服务端

一、Nginx介绍 1、什么是Nginx Nginx Nginx是一个高性能的HTTP和反向代理服务器。是一款轻量级的高性能的web服务器/反向代理服务器/电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器&#xff0c;单台物理服务器可支持30 000&#xff5e;50 000个并发请求。 一款高性能…

B/S架构,java源码,医院绩效管理系统,覆盖了医院绩效管理工作“PDCA”循环的全过程,支持二次开发

医院绩效管理系统源码 医院绩效管理系统以国家医院绩效管理考核政策法规为依据&#xff0c;结合医院管理实践&#xff0c;以经济管理指标为核心&#xff0c;医疗质量、安全、效率、效益管理为重点&#xff0c;特别强调持续改进&#xff08;PDCA&#xff09;管理理念。实现医院绩…

【关于python变量类型学习笔记】

python的变量类型 在创建变量时会在内存中开辟一个空间&#xff0c;变量是存储在内存中的值。 根据变量的数据类型&#xff0c;解释器会分配指定内存&#xff0c;并决定什么数据可以被存储在内存中。 变量可以指定不同的数据类型&#xff0c;这些变量可以存储整数&#xff0c;…

怎么制作图文笔记 电脑图文笔记制作方法

在知识的海洋中遨游时&#xff0c;我时常感到需要一个得力的助手来帮我捕捉那些闪过的灵感和重要的信息。试过各种笔记方法后&#xff0c;我发现了笔记软件的魅力&#xff1a;它们不仅便捷&#xff0c;还能让笔记更加丰富多彩。 想象一下&#xff0c;你正在阅读一篇关于历史文…

js设计模式:建造者模式

作用: 将众多功能独立封装,然后用一个大类将其全部收纳,形成一个完整的功能 这个是很常见的设计模式 示例: function render(h){}function h(){}function $mount(dom){console.log(dom,绑定的根节点)console.log(this,this是vue实例)}function use(plugin){}function $attr(…

SQL-FEFT JOIN (拼接表)

语法 SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_nametable2.column_name; 按照一定规则&#xff0c;将表table1和表table2拼接起来。 例&#xff1a; Employees 表&#xff1a; ------------------------ | Column Name | Type | ------…

合纵连横 – 以 Flink 和 Amazon MSK 构建 Amazon DocumentDB 之间的实时数据同步

在大数据时代&#xff0c;实时数据同步已经有很多地方应用&#xff0c;包括从在线数据库构建实时数据仓库&#xff0c;跨区域数据复制。行业落地场景众多&#xff0c;例如&#xff0c;电商 GMV 数据实时统计&#xff0c;用户行为分析&#xff0c;广告投放效果实时追踪&#xff…

qt-有趣的小球游戏大球吃小球

qt-有趣的小球游戏大球吃小球 一、演示效果二、核心程序三、下载链接 一、演示效果 二、核心程序 #include "mainwindow.h" #include "ui_mainwindow.h" #include "organism.h" #include "badorganism.h" #include <QPainter> …

C++ Primer 笔记(总结,摘要,概括)——第4章 表达式

目录 4.1 基础 4.1.1 基本概念 4.1.2 优先级与结合律 4.1.3 求值顺序 4.2 算术运算符 4.3 逻辑和关系运算符 4.4 赋值运算符 4.5 递增和递减运算符 4.6 成员访问运算符 4.7 条件运算符 4.8 位运算符 4.9 sizeof运算符 4.10 逗号运算符 4.11 类型转换 4.11.1 算数转换…