JAVA8新特性 ----Optional类

2021/9/8 20:07:13

本文主要是介绍JAVA8新特性 ----Optional类,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

static <T> Optional<T> empty()
返回空的 Optional 实例。

boolean equals(Object obj)
判断其他对象是否等于 Optional。

Optional<T> filter(Predicate<? super <T> predicate)
如果值存在,并且这个值匹配给定的 predicate,返回一个Optional用以描述这个值,否则返回一个空的Optional。

<U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper)
如果值存在,返回基于Optional包含的映射方法的值,否则返回一个空的Optional

T get()
如果在这个Optional中包含这个值,返回值,否则抛出异常:NoSuchElementException

int hashCode()
返回存在值的哈希码,如果值不存在 返回 0。

void ifPresent(Consumer<? super T> consumer)
如果值存在则使用该值调用 consumer , 否则不做任何事情。

boolean isPresent()
如果值存在则方法会返回true,否则返回 false。

<U>Optional<U> map(Function<? super T,? extends U> mapper)
如果有值,则对其执行调用映射函数得到返回值。如果返回值不为 null,则创建包含映射返回值的Optional作为map方法返回值,否则返回空Optional。

static <T> Optional<T> of(T value)
返回一个指定非null值的Optional。

static <T> Optional<T> ofNullable(T value)
如果为非空,返回 Optional 描述的指定值,否则返回空的 Optional。

T orElse(T other)
如果存在该值,返回值, 否则返回 other。

T orElseGet(Supplier<? extends T> other)
如果存在该值,返回值, 否则触发 other,并返回 other 调用的结果。

<X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier)
如果存在该值,返回包含的值,否则抛出由 Supplier 继承的异常

String toString()
返回一个Optional的非空字符串,用来调试

demo

@Entity
@Data
@Accessors(chain = true)
public class User {
    private int id;
    private String name;
    private int age;
    private Boolean sex;
    private LocalDateTime date;
}

demo1

    @Test
    void optional1() {
        User user = null;
        String s = Optional.ofNullable(user)
                .map(u ->{
                			//user为null,这段代码不输出
                            System.out.println("name:" + u.getName());
                            return u.getName();
                        })
                .orElse("aaa");
        System.out.println(s);
    }

    @Test
    void optional2() {
        User user = new User ();
        String s = Optional.ofNullable(user)
                .map(u ->{
                			//user不为null,这段代码输出
                            System.out.println("name:" + u.getName());
                            return u.getName();
                        })
                .orElse("aaa");
        System.out.println(s);
    }

	//最终都返回 aaa

demo2
当user不为null时,执行某件事

    @Test
    void optional() {
        
        Optional.ofNullable(user)
                .ifPresent(u->{
                    System.out.println("aaaa");;
                });

    }

demo3
过滤name是zhangsan的user

    @Test
    void optional() {
        User user = new User();
        user.setName("lisi");
        user.setSex(true);
        User zhangsan = Optional.ofNullable(user)
                .filter(u -> "zhangsan".equals(u.getName()))
                .orElseGet(() -> {
                    User user1 = new User();
                    user1.setName("zhangsan");
                    return user1;
                });
        System.out.println(zhangsan);
    }


这篇关于JAVA8新特性 ----Optional类的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程