首页 > 编程语言 >Java8新特性之Optional类的妙用

Java8新特性之Optional类的妙用

时间:2023-07-16 23:48:00浏览次数:53  
标签:妙用 ofNullable String city Person person Optional Java8

该新特性也是翻java八股翻到的,感觉有点小用,所以记录一下
通常我们在调用方法获取参数时,常常会出现要避免空指针,从而进行一系列判断非空的代码,这部分十分冗长且啰嗦还重复,故可以使用一下今天的主角: Java.util.Optional

  1. 创建方式
    共有三种方式供您选择
  • 直接创建空的Optional对象,通过Optional.Empty()方法
Optional<Person> optionalPerson = Optional.Empty();
  • 创建带有对象的Optional对象,通过of()方法
Person person = new Person();
Optional<Person> optionalPerson = Optional.of(person);
  • 创建可能为空的Optional对象,跟第二种很像
Person person = null;
Optional<Person> optionalPerson = Optional.of(person);
  1. 常用方法
  • .ofNullable()
    顾名思义,若为空则返回false
  • .ifPresent()
    若不为空则消费该值,通常跟.ofNullable配合使用
String str = "hello java8";
// output: hello java8
Optional.ofNullable(str).ifPresent(System.out::println);
String str2 = null;
// output: nothing
Optional.ofNullable(str2).ifPresent(System.out::println);
  • .orElse()
    若为空返回默认值
public void test(String city) {
    String defaultCity = Optional.ofNullable(city).orElse("unknown");
}
  • .orElseGet
    若为空则调用所设置实例返回默认值
public void test2(String city) {
    // 如果city为空,则调用generateDefaultCity方法
    String defaultCity = Optional.of(city).orElseGet(this::generateDefaultCity);
}
private String generateDefaultCity() {
    return "beijing";
}
  • .orElseThrow
    若为空,抛自定义异常
public void test3(String city) {
    // 如果city为空,则抛出空指针异常。
    String defaultCity = Optional.of(city).orElseThrow(NullPointerException::new);
}
  1. 使用Optional类对比
    使用前:
// before refactor
public String getCity2(Person person) {
    if (person != null) {
        House house = person.getHouse();
        if (house != null) {
            Address address = house.getAddress();
            if (address != null) {
                String city = address.getCity();
                return city;
            }
        }
    }
    return "unknown";
}

代码冗长且重复
使用后

public String getCityUsingOptional(Person person) {
    String city = Optional.ofNullable(person)
            .map(Person::getHouse)
            .map(House::getAddress)
            .map(Address::getCity).orElse("Unknown city");
    return city;
}

哇呜,简洁明了,心里一下就干净了

标签:妙用,ofNullable,String,city,Person,person,Optional,Java8
From: https://www.cnblogs.com/haipali/p/17558847.html

相关文章

  • 小设计,大作用——防腐层的妙用
    前言最近在学习了解领域驱动模型DDD相关的内容,但是由于没有实际的项目支撑,所以大都是停留在一些理论层面。我发现这里面的一些设计思想还是非常有实用价值的,可以直接应用于你目前的项目中,今天我就来谈谈防腐层的妙用。一个简单的例子大家在做项目中是否有过这样的经历,你的项目......
  • java8 LocalData/Time
    ISO_DATE_TIMELStringtimeString=LocalDateTime.now().atOffset(ZoneOffset.ofHours(8)).format(DateTimeFormatter.ISO_DATE_TIME);System.out.println(timeString);//2023-07-14T18:28:23.056+08:00增加与减小LocalDatedate=LocalDate.now().minusMonths(1);LocalDa......
  • java8xiazai
    Java8下载文件在Java8中,文件下载是一个常见的任务。无论是从互联网下载文件还是从本地服务器下载文件,Java8都提供了一些强大的功能来处理这些任务。本文将介绍如何使用Java8来下载文件,并提供一些示例代码来帮助您更好地理解。使用URLConnection下载文件URLConnection是Java......
  • java8 自定义函数编程
    Java8自定义函数编程在传统的Java编程中,我们通常使用面向对象的方式来组织代码。然而,在某些场景下,面向对象的方式并不是最合适的选择。Java8引入了函数式编程的概念,提供了一些新的特性,例如Lambda表达式和函数接口,使得我们可以更方便地进行函数式编程。Lambda表达式Lambda表达......
  • java8 根据字段去重
    Java8根据字段去重实现方法概述在开发过程中,经常遇到需要根据某个字段对集合进行去重操作的需求。在Java8中,可以利用StreamAPI和Lambda表达式来实现这一功能。实现步骤下面是实现"Java8根据字段去重"的步骤:步骤描述1创建一个实体类(对象)2创建一个集合,并添加多......
  • java8 根据一个集合里的某字段抽取另一个集合的数据
    Java8根据一个集合里的某字段抽取另一个集合的数据1.简介在开发过程中,我们经常会遇到从一个集合中抽取特定字段的需求。Java8提供了一种简洁而高效的方式来实现这个目标。本文章将详细介绍如何使用Java8来根据一个集合里的某个字段抽取另一个集合的数据。2.流程下面是整个过......
  • 使用Debian 11基础镜像制作java8镜像
    下面是dockerfile内容:FROMdebian:bullseye#切换apt源为清华源,并安装vimpingtelnet命令RUNapt-getupdate&&aptinstall-yapt-transport-httpsca-certificates&&\cp/etc/apt/sources.list/etc/apt/sources.list.bak&&\echo"debhttps:......
  • Java8新特性之parallelStream详解
    一、什么是流?Stream是java8中新增加的一个特性,首先Stream不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的,它更像一个高级版本的Iterator。原始版本的Iterator,用户只能显式地一个一个遍历元素并对其执行某些操作;高级版本的Stream,用户只要给出需要对其包含的元素......
  • 使用Java8 Stream流中的Collectors.collectingAndThen()方法去重
    https://blog.csdn.net/qq_40474184/article/details/122043378Stream流的常用方法大全https://blog.csdn.net/weixin_52317961/article/details/128117727......
  • Typora 妙用+阿里云+Picgo上传--实现他人可以查看自己的博客
    Typora妙用+阿里云+Picgo上传关水水来源链接:大学生写博客,做笔记请你不要忘了Typora工具|带你从零开始认识和使用Typora_哔哩哔哩_bilibili如果还是不行可以根据此链接来排查自己的错误链接:Typora+PicGo+阿里云OSS实现图片上传_早上好我是DJ同学的博客-CSDN博客当时是无法在T......