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

相关文章

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Git中恢复已删除分支的几种方法

《Git中恢复已删除分支的几种方法》:本文主要介绍在Git中恢复已删除分支的几种方法,包括查找提交记录、恢复分支、推送恢复的分支等步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录1. 恢复本地删除的分支场景方法2. 恢复远程删除的分支场景方法3. 恢复未推送的本地删除分支场景方法4. 恢复

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

Window Server2016加入AD域的方法步骤

《WindowServer2016加入AD域的方法步骤》:本文主要介绍WindowServer2016加入AD域的方法步骤,包括配置DNS、检测ping通、更改计算机域、输入账号密码、重启服务... 目录一、 准备条件二、配置ServerB加入ServerA的AD域(test.ly)三、查看加入AD域后的变

Window Server2016 AD域的创建的方法步骤

《WindowServer2016AD域的创建的方法步骤》本文主要介绍了WindowServer2016AD域的创建的方法步骤,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、准备条件二、在ServerA服务器中常见AD域管理器:三、创建AD域,域地址为“test.ly”

NFS实现多服务器文件的共享的方法步骤

《NFS实现多服务器文件的共享的方法步骤》NFS允许网络中的计算机之间共享资源,客户端可以透明地读写远端NFS服务器上的文件,本文就来介绍一下NFS实现多服务器文件的共享的方法步骤,感兴趣的可以了解一... 目录一、简介二、部署1、准备1、服务端和客户端:安装nfs-utils2、服务端:创建共享目录3、服

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

Python中使用defaultdict和Counter的方法

《Python中使用defaultdict和Counter的方法》本文深入探讨了Python中的两个强大工具——defaultdict和Counter,并详细介绍了它们的工作原理、应用场景以及在实际编... 目录引言defaultdict的深入应用什么是defaultdictdefaultdict的工作原理

使用Python进行文件读写操作的基本方法

《使用Python进行文件读写操作的基本方法》今天的内容来介绍Python中进行文件读写操作的方法,这在学习Python时是必不可少的技术点,希望可以帮助到正在学习python的小伙伴,以下是Pyth... 目录一、文件读取:二、文件写入:三、文件追加:四、文件读写的二进制模式:五、使用 json 模块读写

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,