Optional类方法

Optional类

    • 方法
      • empty()方法
      • [of(T value)](#of(T value))
      • [ofNullable(T value)](#ofNullable(T value))
      • [filter(Predicate<? super T> predicate)](#filter(Predicate<? super T> predicate))
      • get()
      • [ifPresent(Consumer<? super T> consumer)](#ifPresent(Consumer<? super T> consumer))
      • isPresent()
      • [map(Function<? super T,? extends U> mapper)](#map(Function<? super T,? extends U> mapper))
      • [orElse(T other)](#orElse(T other))
      • [orElseGet(Supplier<? extends T> other)](#orElseGet(Supplier<? extends T> other))
      • [flatMap(Function<? super T,Optional<U>> mapper)](#flatMap(Function<? super T,Optional> mapper))

方法

empty()方法

复制代码
返回一个空的 Optional实例。 
java 复制代码
public static void main(String[] args) {
   Optional<Object> empty = Optional.empty();
    System.out.println(empty);
}

of(T value)

复制代码
返回具有 Optional的当前非空值的Optional。如果传入空值会报空指针异常
java 复制代码
public static void main(String[] args) {
    Optional<Object> empty = Optional.of(new User("John", "12345"));
    System.out.println(empty);
}

ofNullable(T value)

复制代码
返回一个 Optional指定值的Optional,如果为空,则返回一个空的 Optional 。

filter(Predicate<? super T> predicate)

复制代码
如果一个值存在,并且该值给定的谓词相匹配时,返回一个 Optional描述的值,
否则返回一个空的 Optional 。
java 复制代码
public static void main(String[] args) {
    Optional<User> optional = Optional.of(new User("John", "12345"));
    System.out.println(optional);
    Optional<User> user1 = optional.filter(user -> "John".equals(user.getName()));
    System.out.println(user1);
    Optional<User> user2 = optional.filter(user -> "Jane".equals(user.getName()));
    System.out.println(user2);
}

get()

复制代码
如果 Optional中有一个值,返回值,否则抛出 NoSuchElementException 
java 复制代码
Optional<User> user = Optional.of(new User("John", "123456"));
System.out.println(user.get());
Optional<User> optional = Optional.empty();
System.out.println(optional.get());

ifPresent(Consumer<? super T> consumer)

复制代码
如果存在值,则使用该值调用指定的消费者,否则不执行任何操作。
java 复制代码
Optional<User> user = Optional.of(new User("John", "123456"));
user.ifPresent(u -> System.out.printf("User name: %s, password: %s", u.getName(), u.getPassword()));
Optional<User> optional = Optional.empty();
optional.ifPresent(u -> System.out.println("User is not present"));

isPresent()

复制代码
返回 true如果存在值,否则为 false 。 

map(Function<? super T,? extends U> mapper)

复制代码
如果存在一个值,则应用提供的映射函数,如果结果不为空,则返回一个 Optional结果的 Optional 。 
java 复制代码
Optional<User> user = Optional.of(new User("John", "123456"));
Optional<String> s1 = user.map(User::getName);
System.out.println(s1);
Optional<User> optional = Optional.empty();
Optional<String> s = optional.map(User::getName);
System.out.println(s);

orElse(T other)

复制代码
如果Optional容器中无值,则返回other
java 复制代码
public static void main(String[] args) {
    Optional<User> user = Optional.of(new User("John", "123456"));
    User unknown = user.orElse(new User("Unknown", "000000"));
    System.out.println(unknown.getName());
    Optional<User> optional = Optional.empty();
    User unknown1 = optional.orElse(new User("Unknown", "000000"));
    System.out.println(unknown1.getName());
}

orElseGet(Supplier<? extends T> other)

复制代码
返回值(如果存在),否则调用 other并返回该调用的结果。适合需要进行一些操作然后得到值的场景
java 复制代码
public static void main(String[] args) {
    Optional<User> user = Optional.of(new User("John", "123456"));
    User unknown = user.orElseGet(() -> {
        User user2 = new User();
        user2.setName("Unknown2");
        user2.setPassword("000000");
        return user2;
    });
    System.out.println(unknown.getName());
    Optional<User> optional = Optional.empty();
    User unknown2 = optional.orElseGet(() -> {
        User user2 = new User();
        user2.setName("Unknown2");
        user2.setPassword("000000");
        return user2;
    });
    System.out.println(unknown2.getName());
}

flatMap(Function<? super T,Optional++> mapper)++

复制代码
如果一个值存在,应用提供的 Optional映射函数给它,返回该结果,否则返回一个空的 Optional 。 
java 复制代码
public static void main(String[] args) {
    Optional<String> user = Optional.of("John");
    Optional<User> user1 = user.flatMap(name -> Optional.of(new User(name, "password")));
    System.out.println(user1.get().getPassword());
    Optional<String> empty = Optional.empty();
    Optional<User> password = empty.flatMap(name -> Optional.of(new User(name, "password")));
    System.out.println(password);
}
相关推荐
Y***h1873 小时前
第二章 Spring中的Bean
java·后端·spring
8***29313 小时前
解决 Tomcat 跨域问题 - Tomcat 配置静态文件和 Java Web 服务(Spring MVC Springboot)同时允许跨域
java·前端·spring
CoderYanger3 小时前
优选算法-栈:67.基本计算器Ⅱ
java·开发语言·算法·leetcode·职场和发展·1024程序员节
q***06293 小时前
Tomcat的升级
java·tomcat
多多*4 小时前
Java复习 操作系统原理 计算机网络相关 2025年11月23日
java·开发语言·网络·算法·spring·microsoft·maven
青云交4 小时前
Java 大视界 -- Java 大数据在智能物流无人配送车路径规划与协同调度中的应用
java·spark·路径规划·大数据分析·智能物流·无人配送车·协同调度
d***81724 小时前
解决SpringBoot项目启动错误:找不到或无法加载主类
java·spring boot·后端
ᐇ9594 小时前
Java集合框架深度实战:构建智能教育管理与娱乐系统
java·开发语言·娱乐
听风吟丶5 小时前
MyBatis 深度实战:从基础映射到企业级性能优化
java·tomcat
仟濹5 小时前
【Java 基础】面向对象 - 继承
java·开发语言