jdk1.8——Optional类

x33g5p2x  于2022-01-07 转载在 其他  
字(2.8k)|赞(0)|评价(0)|浏览(332)

Optional类可以更友好的处理null问题,将if(xxx == null)等类似代码变得更简洁;

Optional类包含的内容:(jdk1.8)

构造Optional类:

Optional类构造方法都是私有的,只能通过Optional类提供的三个静态方法构造:

  1.  empty():返回一个空值的Optional实例;
  2. of(T value):返回值为value的Optional实例,value为null抛出空指针异常;
  3. ofNullable(T value):返回值为value或者空值的Optional实例,当value为null时相当于empty();

Optional类提供的方法:(jdk1.8)

  • public boolean equals(Object obj)

判断两个Optional是否相等,相等条件:前提两边都是Optional实例,两边值都为空值或者两边值的equals()相等;

  • public String toString()

value是空值返回“Optional.empty”,否则返回“Optional[value值]”;

  • public T get()

返回value的值,value不存在抛出NoSuchElementException异常;

  • public T orElse(T other)

返回value的值,value不存在返回other;

  • public T orElseGet(Supplier<? extends T> other)

返回value的值,value不存在返回指定Supplier接口返回的值,value不存在且supplier为null抛出空指针异常;

  • public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X

返回value的值,value不存在抛出supplier指定的异常,value不存在且supplier为null抛出空指针异常;

  • public boolean isPresent()

判断value值是否存在,存在返回true,不存在返回false;

  • public void ifPresent(Consumer<? super T> consumer)

如果值存在则执行consumer,值存在且consumer为null时抛出空指针异常;

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

对value进行映射,返回映射后的Optional实例,如果mapper返回null则映射为空的Optional实例,mapper为null抛出空指针异常;

  • public<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper)

跟map基本一样,不过mapper需返回一个Optional对象,mapper为null或者返回null都将抛出空指针异常;

  • public Optional<T> filter(Predicate<? super T> predicate)

如果值存在并且符合predicate条件则返回当前Optional,否则返回一个空的Optional实例,predicate为null抛出空指针异常;

高版本jdk额外的方法:

  • public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)

jdk9新增,如果值存在则执行action,否则执行emptyAction,值存在且action为null或者值不存在切emptyAction为null都将抛出空指针异常;

  • public boolean isEmpty()

jdk11新增,判断值是否不存在,空值返回true,非空值返回false;(跟isPresent()相反)

  • public Optional<T> or(Supplier<? extends Optional<? extends T>> supplier)

jdk9新增,跟orElseGet基本一样,只是返回值不同,supplier也需返回Optional对象;

  • public T orElseThrow()

jdk10新增,值存在返回该Optional对象,否则返回NoSuchElementException异常;

  • public Stream<T> stream()

jdk9新增,将Optional转换成steam对象;

小demo:

/**
 * 2022年1月6日下午2:25:25
 */
package testOptional;

import java.util.Optional;

/**
 * @author XWF
 *
 */
public class TestOptional {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Optional<String> opt = Optional.empty();
		System.out.println("isEmpty:" + opt.isEmpty());
		System.out.println("isPresent:" + opt.isPresent());
		opt.ifPresentOrElse(x -> System.out.println("opt=" + x), () -> System.out.println("opt不存在"));
		System.out.println(opt.orElse("abc"));
		System.out.println(opt.or(() -> Optional.of("DEF")).map(String::toLowerCase));
		System.out.println("===========================");
		opt = Optional.of("XYZ");
		opt.ifPresent(x -> System.out.println(x + x));
		System.out.println(opt.filter(x -> x.length() > 5));
		System.out.println(opt.filter(x -> x.length() <= 5));
		opt.stream().forEach(System.out::println);
	}

}

执行结果:

相关文章