Lambda表达式

news2024/11/18 14:26:07

注:函数式接口和Lamda的区别

函数式接口:即只有一个抽象方法的接口,而这一个抽象方法的接口可以由Lamda表达式来实现。

1.Lambda表达式

1.1 省略规则

  1. 参数类型可以省略
  2. 方法体只有一句代码时大括号和唯一一句代码的分号可以省略
  3. 方法只有一个参数时小括号可以省略

2.Stream 流

2.1常用操作

2.2.1 创建流

2.2.2 中间操作

2.2.2.1 filter

可以对流中的元素进行条件过滤,符合过滤条件的才能继续留在流中

2.2.2.2 map

可以对流中的元素进行计算或转换

如上就是把原本流中的是Author对象类型,现在变成String类型

2.2.2.3 distinct

可以去除流中的重复元素

注意: distinct方法是依赖object中的equals方法来判断是否是相同对象,所以需要注意重写equals方法

2.2.2.4 sorted

可以对流中的元素进行排序

注意:如果调用空参的sorted()方法,需要流中的元素是实现了Comparable

2.2.2.5 flatMap

map只能把一个对象转换成另一个对象来作为流中的元素,而flatMap可以把一个对象转换成多个对象来作为流中的元素

例子一

例子二

2.2.3 终结操作

注意:如果没有终结操作,流里面的方法是不会生效的

2.2.3.1 forEach

2.2.3.2 count

获取当前流中元素的个数

2.2.3.3 min&max

2.2.3.4 collect

把当前的流转换成集合

2.2.3.5 查找与匹配 anyMatch

返回值是boolean类型的

2.2.3.6 查找与匹配 allMatch

是否所有的元素都符合条件,只有所有都符合时才返回true

2.2.3.7reduce

reduce归并

对流中的数据按照你指定的计算方式计算出一个结果(锁减操作)。

reduce的作用是把stream中的元素给组合起来,我们可以传入一个初始值,它会按照我们的计算方式依次拿流中的元素和在初始值的基础上进行计算,计算结果再和后面的元素计算。

3.Optional

在JDK8中引入Optional更优雅的避免空指针

使用Optional类就可以避免在程序中使用一堆的if来处理空了。下表列出Optional类中的方法:

方法名

描述

empty

返回一个空的Optional实例

of

将指定值用Optional封装后返回,如果值为null,则抛出NullPointerException异常

ofNullable

将指定值用Optional封装后返回,如果值为null,则返回空的Optional对象

get

如果值存在,则返回该值,否则抛出NullPointerException异常

isPresent

检查值是否存在,存在返回true,否则返回false

ifPresent

如果值存在,就执行使用该值的方法调用,否则什么都不做

filter

如果值存在并且满足提供的谓词,就返回包含该值的Optional对象,否则返回空的Optional对象

map

如果值存在,就对该值执行提供的mapping函数调用

flatMap

如果值存在,就对该值执行提供的mapping函数调用,返回一个Optional类型的值,否则就返回一个空的Optional对象

orElse

如果值存在就将其返回,否则返回指定的的值

orElseGet

如果值存在就将其返回,否则返回由指定的Supplier接口生成的值

orElseThrow

如果值存在就将其返回,否则抛出由指定的Supplier接口生成的异常

1.1 empty(不常用)

Optional<User> user = Optional.empty();

创建一个空的Optional对象

1.2 of(不常用)

User user = null; Optional<User> optional = Optional.of(user);

user为空,直接报NullPointerException异常,因此该方法一般很少用。

1.3 ofNullable

User user = null; Optional<User> optional = Optional.ofNullable(user);

user为空,则返回空的Optional对象

1.4 get

User user = null; Optional<User> optional = Optional.ofNullable(user); optional.get();

从Optional中获取值,如果值不存在则抛出如下异常:java.util.NoSuchElementException: No value present

1.5 isPresent

User user = null; Optional<User> optional = Optional.ofNullable(user); optional.isPresent();

以上例子返回false,如果user不为空,则返回true

1.6 ifPresent

User user = null; Optional<User> optional = Optional.ofNullable(user); optional.ifPresent(us->{ //user不为空,执行 });

1.7 filter

User user = new User(); user.setName("小A"); boolean result = Optional.ofNullable(user).filter(us -> "小A".equals(us.getName())).isPresent();

如果用户名为小A,则返回true,否则返回false

1.8 map

User user = new User(); user.setName("小A"); String name = Optional.ofNullable(user).map(User::getName).get();

如果user不为空,则抽取name属性,使用get()获取。这里如果name为空,则会报异常,因此通常都是指定默认值或使用自定义异常抛出。

String name = Optional.ofNullable(user).map(User::getName).orElse("");

String name = Optional.ofNullable(user) .map(User::getName) .orElseThrow(()->new RuntimeException("用户名不能为空"));

1.9 flatMap

该方法一般用于从类中获取其他类的中某个属性,比如一个班级里面有学生,学生里面有地址,现在需要获取这个班级下的某个学生的地址,按之前的写法:

Address address = new Address(); address.setAddr("天河区"); Student student = new Student(); student.setName("小A"); student.setAddress(address); Grade grade = new Grade(); grade.setName("三年级2班"); grade.setStudent(student); if(!ObjectUtils.isEmpty(grade)){ Student student1 = grade.getStudent(); if(!ObjectUtils.isEmpty(student1)){ Address address1 = student1.getAddress(); if(!ObjectUtils.isEmpty(address1)){ System.out.println(address1.getAddr()); } } }

为了程序不出问题,就会写一大堆的if来判断,下面用flatMap来看下怎么实现:

Optional.ofNullable(grade) .flatMap(g->Optional.ofNullable(g.getStudent())) .flatMap(s->Optional.ofNullable(s.getAddress())) .map(Address::getAddr) .orElse("")

Optional.ofNullable(grade) .map(Grade::getStudent) .map(Student::getAddress) .map(Address::getAddr) .orElse("")

3.1使用

3.1.1创建对象

Optional就好像是包装类,可以把我们的具体数据封装到 Optional对象内部,然后我们去使用 Optional中封装好的方法操作封装进去的数据就可以优雅的避免空指针。

我们一般使用 Optional的静态方法ofNullable来吧数据封装成一个 Optional对象,无论传入参数是否为null 都不会报错。

Author author=new Author();

Optional<Author> authorOptional=Optional.ofNullable(author);

而实际开发中我们数据很多是从数据库中获取的,Mybatis3.5版本以后也已经可以支持 Optional了。我们可以直接在Dao方法的返回值类型定义成 Optional类型,Mybatis会自己把数据封装成Optional对象返回。

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

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

相关文章

Xilinx IOBUF 的用法

Xilinx IOBUF 的用法 文章目录Xilinx IOBUF 的用法一、概念1. 基本概念2. 硬件结构2.1 IOBUF2.2 OBUFT二、实例三、参考文献一、概念 1. 基本概念 **应用场景&#xff1a;**在vivado中&#xff0c;连接的管脚的信号一般都会自动添加OBUF或IBUF。但是对于inout类型的接口&#…

腾讯云发布智慧员工管理方案,支持组织360度协作

提升组织活力和协作效率是企业打造自身竞争力的关键因素。12月1日&#xff0c;腾讯云发布智慧员工管理方案&#xff0c;融合腾讯电子签、腾讯乐享、腾讯微卡、腾讯云HiFlow、数据连接器等多款产品&#xff0c;打造高效、安全、共享、低碳的组织协同网络。 腾讯云副总裁答治茜表…

MyBatis-Plus配置之基础配置(SpringBoot)

系列文章目录 Mybatis-Plus知识点[MyBatisMyBatis-Plus的基础运用]_心态还需努力呀的博客-CSDN博客 Mybatis-PlusSpringBoot结合运用_心态还需努力呀的博客-CSDN博客MyBaits-Plus中TableField和TableId用法_心态还需努力呀的博客-CSDN博客 MyBatis-Plus中的更新操作&#x…

排序算法——选择排序、冒泡排序、插入排序 超易理解【JAVA】

一、什么是选择排序算法&#xff1f; 选择排序&#xff08;Selection sort&#xff09;是一种简单直观的排序算法。 选择排序是不稳定的排序方法。时间复杂度O(n2) 工作原理 第一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在…

redis安装(单机模式和哨兵模式)

单机模式&#xff08;学习环境建议&#xff09;&#xff1a; 1.添加软件安装源 yum install epel-release 2.安装redis yum install redis -y 3.启动redis systemctl start redis 4.允许开机启动 systemctl enable redis 5.修改配置 vim /etc/redis.conf 6.bind改成…

我的期末网页设计HTML作品——咖啡文化网页制作

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

[附源码]计算机毕业设计智能家电商城Springboot程序

项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 Maven管理等等。 环境需要 1.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境&#xff1a;IDEA&#xff0c;Eclipse,Myeclipse…

深入浅出学习透析 Nginx 服务器的基本原理和配置指南「运维操作实战篇」

Nginx前提回顾 Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性: Web服务器&#xff1a;相比 Apache&#xff0c;Nginx 使用更少的资源&#xff0c;支持更多的并发连接&#xff0c;体现更高的效率&#xff0c;这点使 Nginx 尤其受到虚拟主机提供商的欢…

python中利用随机数绘制曲线

使用python绘制数学函数图像很方便&#xff0c;在构造函数自变量取值时可以利用随机数生成模块&#xff0c;因本人工作需要&#xff0c;现将python中随机数的使用&#xff0c;以及二次函数图像绘制进行梳理总结 目录 1. python中的随机数产生 1.1 random模块 1.1 numpy.ran…

基于Zephyr平台nRF Connect SDK在Windows10下开发环境的快速搭建

基于Zephyr平台nRF Connect SDK在Windows10下开发环境的快速搭建 前言. Nordic开发SDK需要在线搭建&#xff0c;对于网络不太好的&#xff0c;实在是费时费力&#xff0c;该文特点是利用拷贝已经搭建好的一个SDK目录&#xff0c;直接在新的PC平台实现大部分文件的离线安装&…

职业成功指南:10条核心原则(下)丨三叠云

本期继续讲一下职场。 我将通过这两期的内容&#xff0c;为你提供一套简单的核心原则&#xff0c;希望能在职业道路上帮助到你。 让我们一起走进《职业成功指南&#xff1a;10条核心原则》下期 6. 避免攀比陷阱 在职业生涯的早期&#xff0c;你很容易将自己与周围的人进行比…

《Linux运维总结:Centos7.6部署二进制mongodb4.2.23三节点副本集群》

一、Mongodb集群模式 1、三种集群介绍 MongoDB有三种集群部署模式&#xff0c;分别为主从复制&#xff08;Master-Slaver&#xff09;、副本集&#xff08;Replica Set&#xff09;和分片&#xff08;Sharding&#xff09;模式。 1、Master-Slaver 是一种主从副本的模式&#x…

[附源码]计算机毕业设计智慧园区运营管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

详解设计模式:观察者模式

观察者模式&#xff08;Observer Pattern&#xff09;也被称为发布-订阅&#xff08;Publish/Subscribe&#xff09;模式、模型-视图&#xff08;Model/View&#xff09;模式&#xff0c;是在 GoF 23 种设计模式中定义了的行为型模式。 观察者模式 定义了一对多的关系&#xff…

牛客网最新Java面试通关八股文手册,花点耐心每天刷上10道题,挑战一下年薪50W!

明年金三银四不少人已经蓄势待发&#xff0c;信心满满地准备投递简历&#xff0c;到处面试&#xff0c;在不同的 Offer 之中择优而栖。 与此同时&#xff0c;也有人会悔恨自己这半年进步不大&#xff0c;每天噼里啪啦敲代码&#xff0c;但面对那些不能再熟悉的 Java 面试题时&…

H2N-Val-Pro-Pro-COOH,58872-39-2

H-Val-Pro-Pro-OH&#xff0c;是牛奶来源的脯氨酸肽衍生物&#xff0c;是血管紧张素 I 转化酶 (ACE) 的抑制剂&#xff0c;其IC50 为 9 μM。H-Val-Pro-Pro-OH, a milk-derived proline peptides derivative, is an inhibitor of Angiotensin I converting enzyme (ACE), with …

C++手敲基于梯度图和像素数量数组的OTSU阈值分割

一、OTSU算法原理 ➢OTSU法&#xff08;最大类间方差法&#xff0c;有时也称之为大津算法&#xff09; ➢ 使用聚类的思想&#xff0c;把图像的灰度数按灰度级分成2个部分&#xff0c; 使得两个部分之间的灰度值差异最大&#xff0c;每个部分之间的灰 度差异最小 ➢ 通过方…

数学建模-2022年亚太赛C题(含思路过程和代码)

目录 一、题目以及大概的思路 二、数据预处理 三、预测模型 四、全球变暖的相关性分析 五、赛后总结 一、题目以及大概的思路 先对数据进行无量纲化处理&#xff0c;根据所给不确定度与数据&#xff0c;计算出相对不确定度&#xff0c;并将其异常点剔除&#xff0c;通常情况…

[附源码]计算机毕业设计病房管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Cisco ASA防火墙——远程控制与多安全区域

作者简介&#xff1a;一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.远程管理ASA 1.配置Telnet接入 2.配置SSH接入 3.配置ASDM接…