Lambda表达式与“::“方法引用 判空包装类Optional

2023-10-31 08:36

本文主要是介绍Lambda表达式与“::“方法引用 判空包装类Optional,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

函数式接口

  • 函数式接口(Functional Interface)就是有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
  • 函数式接口可以被隐式转换为Lambda表达式。

Lambda表达式与"::"方法引用

  • 方法引用主要是对Lambda表达式的一种优化!
  • 方法引用的使用前提是对象和方法都是已经存在的!
  • 方法引用提供了一种引用而不执行方法的方式。
  • 当Lambda表达式中只是执行一个方法调用时,不用Lambda表达式,直接通过方法引用的形式可读性更高一些方法引用是一种更简洁易懂的Lambda表达式!
  • 这种双冒号"::"的写法被称为"方法引用",双冒号"::"也被称为方法引用符或引用计算符,而它所在的表达式被称为方法引用~!
package com.gch.method.references;/*** 定义一个打印的函数式接口*/
@FunctionalInterface
public interface Printable {/*** 定义一个打印字符串的抽象方法* @param str*/void print(String str);
}
package com.gch.method.references;/*** 方法引用 & Lambda表达式*/
public class PrintableDemo {/*** 主函数* @param args*/public static void main(String[] args) {/*** 分析:Lambda表达式的目的,打印参数传递的字符串* 把参数s传递给了System.out对象,调用out对象中的方法println()对字符串进行了输出!* 注意:*   1.System.out对象是已经存在的;*   2.println()方法也是已经存在的!* 所以我们可以使用方法引用来优化Lambda表达式!* 可以使用System.out直接引用(调用)println()方法*/// 调用printString()方法,方法的参数Printable是一个函数式接口,所以可以传递Lambda表达式printString((s) -> {System.out.println(s);});/*** 方法引用:使用对象来直接引用方法!* "::"就是方法引用的运算符*/printString(System.out::println);}/*** 定义一个方法,参数传递Printable接口,对字符串进行打印* @param p Printable接口*/public static void printString(Printable p){p.print("Hello World!");}
}

判空包装类 - Optional

  • Java 8还新增了一个非常重要的判空包装类Optional,这个类可以很有效的处理空指针问题!
比如对于下面这样一个很简单的方法,如果我们在传入参数时,传个null进去,运行时会报错 - 空指针异常 - java.lang.NullPointerException:
package com.gch.optional.demo;public class Test {public static void main(String[] args) {// java.lang.NullPointerExceptiontest(null);}/*** 传入一个字符串,如果字符串不为空,那就打印它的长度!* @param str 传入的字符串*/private static void test(String str) {if (!str.isEmpty()) {System.out.println("字符串长度为:" + str.length());}}
}
因此,我们还需要在使用之前判断字符串是否为null:
package com.gch.optional.demo;public class Test {public static void main(String[] args) {test(null);}/*** 传入一个字符串,如果字符串不为空,那就打印它的长度!* @param str 传入的字符串*/private static void test(String str) {// 如果字符串为null,则直接结束方法!if(str == null) {return;}if (!str.isEmpty()) {System.out.println("字符串长度为:" + str.length());}}
}

虽然这种方式很好,但是在Java 8之后,有了Optional类,它可以更加优雅的处理这种问题:

package com.gch.optional.demo;import java.util.Optional;/*** 判空包装类 - Optional的用法*/
public class OptionalDemo {public static void main(String[] args) {test(null);}/*** 传入一个字符串,如果字符串不为Null,则打印它的长度* @param str 传入的字符串*/private static void test(String str){Optional // 将传入的对象包装进Optional中.ofNullable(str)// 如果不为null,则执行这里的Consumer实现!.ifPresent(s -> System.out.println("字符串长度为:" + s.length()));}
}
private static void test(String str) {// get方法可以获取被包装的对象引用,如果被包装的对应为null// 则get()方法获取时会抛出异常 - java.util.NuSuchElementExceptionString s = Optional.ofNullable(str).get();}


 

这篇关于Lambda表达式与“::“方法引用 判空包装类Optional的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/314095

相关文章

SpringBoot中使用Flux实现流式返回的方法小结

《SpringBoot中使用Flux实现流式返回的方法小结》文章介绍流式返回(StreamingResponse)在SpringBoot中通过Flux实现,优势包括提升用户体验、降低内存消耗、支持长连... 目录背景流式返回的核心概念与优势1. 提升用户体验2. 降低内存消耗3. 支持长连接与实时通信在Sp

Conda虚拟环境的复制和迁移的四种方法实现

《Conda虚拟环境的复制和迁移的四种方法实现》本文主要介绍了Conda虚拟环境的复制和迁移的四种方法实现,包括requirements.txt,environment.yml,conda-pack,... 目录在本机复制Conda虚拟环境相同操作系统之间复制环境方法一:requirements.txt方法

Nginx 重写与重定向配置方法

《Nginx重写与重定向配置方法》Nginx重写与重定向区别:重写修改路径(客户端无感知),重定向跳转新URL(客户端感知),try_files检查文件/目录存在性,return301直接返回永久重... 目录一.try_files指令二.return指令三.rewrite指令区分重写与重定向重写: 请求

MySQL 打开binlog日志的方法及注意事项

《MySQL打开binlog日志的方法及注意事项》本文给大家介绍MySQL打开binlog日志的方法及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、默认状态二、如何检查 binlog 状态三、如何开启 binlog3.1 临时开启(重启后失效)

Python中提取文件名扩展名的多种方法实现

《Python中提取文件名扩展名的多种方法实现》在Python编程中,经常会遇到需要从文件名中提取扩展名的场景,Python提供了多种方法来实现这一功能,不同方法适用于不同的场景和需求,包括os.pa... 目录技术背景实现步骤方法一:使用os.path.splitext方法二:使用pathlib模块方法三

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

CSS实现元素撑满剩余空间的五种方法

《CSS实现元素撑满剩余空间的五种方法》在日常开发中,我们经常需要让某个元素占据容器的剩余空间,本文将介绍5种不同的方法来实现这个需求,并分析各种方法的优缺点,感兴趣的朋友一起看看吧... css实现元素撑满剩余空间的5种方法 在日常开发中,我们经常需要让某个元素占据容器的剩余空间。这是一个常见的布局需求

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.