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

相关文章

PyTorch核心方法之state_dict()、parameters()参数打印与应用案例

《PyTorch核心方法之state_dict()、parameters()参数打印与应用案例》PyTorch是一个流行的开源深度学习框架,提供了灵活且高效的方式来训练和部署神经网络,这篇文章主要介绍... 目录前言模型案例A. state_dict()方法验证B. parameters()C. 模型结构冻

Python字符串处理方法超全攻略

《Python字符串处理方法超全攻略》字符串可以看作多个字符的按照先后顺序组合,相当于就是序列结构,意味着可以对它进行遍历、切片,:本文主要介绍Python字符串处理方法的相关资料,文中通过代码介... 目录一、基础知识:字符串的“不可变”特性与创建方式二、常用操作:80%场景的“万能工具箱”三、格式化方法

springboot+redis实现订单过期(超时取消)功能的方法详解

《springboot+redis实现订单过期(超时取消)功能的方法详解》在SpringBoot中使用Redis实现订单过期(超时取消)功能,有多种成熟方案,本文为大家整理了几个详细方法,文中的示例代... 目录一、Redis键过期回调方案(推荐)1. 配置Redis监听器2. 监听键过期事件3. Redi

基于SpringBoot实现分布式锁的三种方法

《基于SpringBoot实现分布式锁的三种方法》这篇文章主要为大家详细介绍了基于SpringBoot实现分布式锁的三种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、基于Redis原生命令实现分布式锁1. 基础版Redis分布式锁2. 可重入锁实现二、使用Redisso

自定义注解SpringBoot防重复提交AOP方法详解

《自定义注解SpringBoot防重复提交AOP方法详解》该文章描述了一个防止重复提交的流程,通过HttpServletRequest对象获取请求信息,生成唯一标识,使用Redis分布式锁判断请求是否... 目录防重复提交流程引入依赖properties配置自定义注解切面Redis工具类controller

C++ 右值引用(rvalue references)与移动语义(move semantics)深度解析

《C++右值引用(rvaluereferences)与移动语义(movesemantics)深度解析》文章主要介绍了C++右值引用和移动语义的设计动机、基本概念、实现方式以及在实际编程中的应用,... 目录一、右值引用(rvalue references)与移动语义(move semantics)设计动机1

Java调用DeepSeek API的8个高频坑与解决方法

《Java调用DeepSeekAPI的8个高频坑与解决方法》现在大模型开发特别火,DeepSeek因为中文理解好、反应快、还便宜,不少Java开发者都用它,本文整理了最常踩的8个坑,希望对... 目录引言一、坑 1:Token 过期未处理,鉴权异常引发服务中断问题本质典型错误代码解决方案:实现 Token

Nginx 访问控制的多种方法

《Nginx访问控制的多种方法》本文系统介绍了Nginx实现Web访问控制的多种方法,包括IP黑白名单、路径/方法/参数控制、HTTP基本认证、防盗链机制、客户端证书校验、限速限流、地理位置控制等基... 目录一、IP 白名单与黑名单1. 允许/拒绝指定IP2. 全局黑名单二、基于路径、方法、参数的访问控制

Python中Request的安装以及简单的使用方法图文教程

《Python中Request的安装以及简单的使用方法图文教程》python里的request库经常被用于进行网络爬虫,想要学习网络爬虫的同学必须得安装request这个第三方库,:本文主要介绍P... 目录1.Requests 安装cmd 窗口安装为pycharm安装在pycharm设置中为项目安装req

nginx跨域访问配置的几种方法实现

《nginx跨域访问配置的几种方法实现》本文详细介绍了Nginx跨域配置方法,包括基本配置、只允许指定域名、携带Cookie的跨域、动态设置允许的Origin、支持不同路径的跨域控制、静态资源跨域以及... 目录一、基本跨域配置二、只允许指定域名跨域三、完整示例四、配置后重载 nginx五、注意事项六、支持