【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(){
            @Override
            public 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>() {
            @Override
            public 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>() {
            @Override
            public 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 第一版

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux之安装jdk,tomcat,mysql,部署项目

目录 一、操作流程 1.1安装jdk 1.2安装tomcat&#xff08;加创建自启动脚本&#xff09; 1.3 安装mysql 1.4部署项目 一、操作流程 首先把需要用的包放进opt文件下 1.1安装jdk 把jdk解压到/usr/local/java里 在刚刚放解压包的文件夹打开vim /etc/profile编辑器&#xff0c…

【前端素材】推荐优质后台管理系统Dashy平台模板(附源码)

一、需求分析 后台管理系统&#xff08;或称作管理后台、管理系统、后台管理平台&#xff09;是一种专门用于管理网站、应用程序或系统后台运营的软件系统。它通常由一系列功能模块组成&#xff0c;为管理员提供了管理、监控和控制网站或应用程序的各个方面的工具和界面。以下…

prometheus监控带安全认证的elasticsearch

1.下载elasticsearch_exporter wget 下载二进制包并解压、运行&#xff1a; wget https://github.com/prometheus-community/elasticsearch_exporter/releases/download/v1.3.0/elasticsearch_exporter-1.3.0.linux-amd64.tar.gz tar -xvf elasticsearch_exporter-1.3.0.lin…

【Prometheus】概念和工作原理介绍

目录 一、概述 1.1 prometheus简介 1.2 prometheus特点 1.3 prometheus架构图 1.4 prometheus组件介绍 1、Prometheus Server 2、Client Library 3、pushgateway 4、Exporters 5、Service Discovery 6、Alertmanager 7、grafana 1.5 Prometheus 数据流向 1.6 Pro…

MATLAB环境下基于洗牌复杂演化的图像分割算法

智能优化算法因其较强的搜索解能力而得到了大量的应用&#xff0c;在这些计算智能算法中&#xff0c;群体智能优化算法因其高效性、有效性以及健壮性等优点而得到了科研人员的青睐。这类算法借鉴生物群体的合作特性&#xff0c;主要解决大规模复杂的分布式问题&#xff0c;研究…

WPF Style样式设置

1.本window设置样式 <Window x:Class"WPF_Study.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expressi…

论文阅读NAM:Normalization-based Attention Module

Abstarct 识别不太显著的特征是模型压缩的关键。然而&#xff0c;在革命性的注意力机制中却没有对其进行研究。在这项工作中&#xff0c;我们提出了一种新的基于归一化的注意力模块&#xff08;NAM&#xff09;&#xff0c;它抑制了不太显著的权重。它对注意力模块应用了权重稀…

YOLOV9论文概述

YOLOV9论文阅读 摘要信息瓶颈可逆函数可编程梯度信息 (PGI)辅助可逆分支多级辅助信息 GELAN实验设计参数设置实验结论消融实验模块深度辅助可逆分支和多层辅助信息PGI综合 可视化结果结论 摘要 今天的深度学习方法侧重于如何设计最合适的目标函数&#xff0c;以便模型的预测结果…

Seata分布式事务实战AT模式

目录 分布式事务简介 典型的分布式事务应用场景 两阶段提交协议(2PC) 2PC存在的问题 什么是Seata&#xff1f; Seata的三大角色 Seata AT模式的设计思路 一阶段 二阶段 Seata快速开始 Seata Server&#xff08;TC&#xff09;环境搭建 db存储模式Nacos(注册&配…

H5 个人引导页官网型源码

H5 个人引导页官网型源码 源码介绍&#xff1a;源码无后台、无数据库&#xff0c;H5自检测适应、无加密&#xff0c;直接修改可用。 源码含有多选项&#xff0c;多功能。可展示自己站点、团队站点。手机电脑双端。 下载地址&#xff1a; https://www.changyouzuhao.cn/1434.…

HTML+CSS+JS:轮播组件

效果演示 一个具有动画效果的卡片元素和一个注册表单&#xff0c;背景为渐变色&#xff0c;整体布局简洁美观。 Code <div class"card" style"--d:-1;"><div class"content"><div class"img"><img src"./i…

java接受命令行输入

在Java中&#xff0c;你可以使用​​Scanner​​类来接受命令行输入。以下是一个简单的例子&#xff0c;演示如何从命令行接受输入&#xff1a; import java.util.Scanner;public class CommandLineInputExample {public static void main(String[] args) {// 创建一个Scanner…

019 Spring Boot+Vue 电影院会员管理系统(源代码+数据库+文档)

部分代码地址&#xff1a; https://github.com/XinChennn/xc019-cinema 一、系统介绍 cinema项目是一套电影院会员管理系统&#xff0c;使用前后端分离架构开发包含管理员、会员管理、会员卡管理、电影票、消费记录、数据统计等模块 二、所用技术 后端技术栈&#xff1a; …

width:100%和width:auto有啥区别

项目中使用了with属性&#xff0c;突然好奇auto 和 100% 的区别&#xff0c;特地搜索实践总结了一下观点 一、 width属性介绍二、 代码带入三、 分析比较四、 总结 一、 width属性介绍 width 属性用于设置元素的宽度。width 默认设置内容区域的宽度&#xff0c;但如果 box-siz…

国创证券:迎政策助力,工业母机概念爆发,华中数控、宏德股份等涨停

工业母机概念26日盘中强势拉升&#xff0c;到发稿&#xff0c;华中数控、宏德股份“20cm”涨停&#xff0c;德恩精工、纽威数控涨超16%&#xff0c;科德数控、拓斯达等涨超10%&#xff0c;秦川机床、沈阳机床等亦涨停。 音讯面上&#xff0c;2月23日举行的中央财经委员会第四次…

C语言第三十一弹---自定义类型:结构体(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 目录 1、结构体内存对齐 1.1、为什么存在内存对齐? 1.2、修改默认对齐数 2、结构体传参 3、结构体实现位段 3.1、什么是位段 3.2、位段的内存分配 3.3、…

prime_series_level-1靶场详解

环境搭建 官网https://www.vulnhub.com/entry/prime-1,358/ 直接导入靶机 解题思路 arp-scan -l 确认靶机ip为192.168.236.136 也可以使用nmap扫网段 nmap -sn 192.168.236.0/24 使用nmap扫描靶机开放的端口 nmap -sS -T5 --min-rate 10000 192.168.236.136 -sC -p- &#xf…

BioVendor PEDF Human ELISA试剂盒

PEDF首先被发现是由人胎儿视网膜色素上皮细胞合成并释放到光感受器基质中的。它定位于人类染色体17p。PEDF是一种50 kDa多功能糖蛋白&#xff0c;属于丝氨酸蛋白酶抑制剂超基因(serpin)家族&#xff0c;作用类似丝氨酸蛋白酶的底物而不是抑制剂&#xff0c;也被描述为丝氨酸肽酶…

力扣模板题:回文链表

请牢记检测回文串的模板 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ bool isPalindrome(struct ListNode* head) {int size0;struct ListNode* pointhead;while(point){size;pointpoint->next;}int arr…

遭遇DDOS攻击忍气吞声?立刻报警!首都网警重拳出击,犯罪分子无所遁形

遭遇DDOS攻击忍气吞声&#xff1f;立刻报警&#xff01;首都网警重拳出击 公元2024年2月24日18时许&#xff0c;笔者的个人网站突然遭遇不明身份者的DDOS攻击&#xff0c;且攻击流量已超过阿里云DDos基础防护的黑洞阈值&#xff0c;服务器的所有公网访问已被屏蔽&#xff0c;由…