Java8之Optional类

Option类(java.util.Optional)是一个容器类,代表一个值存在或不存在,原来用null表示一个值不存在,现在Optional可以更好的表达这个概念,并且避免空指针异常。

package com.alisa.java8.optional;

import com.alisa.java8.entity.Employee;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.omg.Messaging.SYNC_WITH_TRANSPORT;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.Optional;

/*
* Optional容器类:用于避免空指针异常
* Optional.of(T t):创建一个Optional实例
* Optional.empty():创建一个空的Optional实例
* Optional.ofNullable(T t):若t不为null,创建Optional实例,否则创建空实例
* isPresent():判断是否包含值
* orElse(T t):如果调用对象包含值,返回该值,否则返回t
* orElseGet(Supplier s):如果调用对象包含值,返回该值,否则返回s获取的值
* map(Function f):如果有值对其处理,并返回处理后的Optional,否则返回Optional.empty()
* flatMap(Function mapper):与map类似,要求返回值必须是Optional
* */
@RunWith(SpringRunner.class)
@SpringBootTest
public class OptionalTest {
    @Test
    public void test1() {
        Optional<Employee> op = Optional.of(new Employee());
        Employee emp = op.get();
        System.out.println(emp);
    }

    @Test
    public void test2() {
        Optional<Employee> op = Optional.ofNullable(new Employee());
        if (op.isPresent()) {
            System.out.println(op.get());
        }
        Employee emp1 = op.orElse(new Employee("Alisa"));
        System.out.println(emp1);
        Employee emp2 = op.orElseGet(() -> new Employee());
        System.out.println(emp2);
    }

    @Test
    public void test3() {
        Optional<Employee> op1 = Optional.of(new Employee(101, "alisa", 18, 111111));
        Optional<String> op2 = op1.map(Employee::getName);
        System.out.println(op2.get());
        Optional<String> op3 = op1.flatMap((e) -> Optional.of(e.getName()));
        System.out.println(op3.get());
        int i  = (int)(10+Math.random()*11);
        System.out.println(i);
    }
}
Java 8引入的Optional是一个容器对象,用于包含可能为null的值。它的主要目的是为了解决空指针异常(NullPointerException),提供了一种更优雅的方式来处理可能为null的值。Optional提供了一些方法来处理值的存在与否,从而使代码更加安全和简洁。 以下是Optional的一些常用方法: 1. **of()**:创建一个包含非null值的Optional对象。如果值为null,则抛出NullPointerException。 2. **ofNullable()**:创建一个包含可能为null值的Optional对象。如果值为null,则返回一个空的Optional对象。 3. **isPresent()**:如果值存在,则返回true,否则返回false。 4. **get()**:如果值存在,则返回该值,否则抛出NoSuchElementException。 5. **orElse(T other)**:如果值存在,则返回该值,否则返回指定的默认值。 6. **orElseThrow(Supplier<? extends X> exceptionSupplier)**:如果值存在,则返回该值,否则抛出指定的异常。 7. **map(Function<? super T, ? extends U> mapper)**:如果值存在,则对其应用指定的映射函数,否则返回空的Optional对象。 示例代码: ```java import java.util.Optional; public class OptionalExample { public static void main(String[] args) { String str = "Hello, World!"; Optional<String> optional = Optional.ofNullable(str); // 检查值是否存在 if (optional.isPresent()) { System.out.println(optional.get()); } else { System.out.println("Value is absent"); } // 使用orElse方法 String result = optional.orElse("Default Value"); System.out.println(result); // 使用map方法 Optional<String> upperCaseOptional = optional.map(String::toUpperCase); upperCaseOptional.ifPresent(System.out::println); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值