为了避免出现这个异常,我们经常会使用if语句做判空操作,繁琐的if语句就会导致代码不够简洁。于是Java8 引入了Optional类,主要解决空指针异常(NullPointerException)问题。
对于比较简单的判空问题,其实并不太推荐使用Optional,可以使用三元运算等方式来替换if-esle。对于较为复杂的判空(如多层嵌套判空),推荐使用Optional。
-
static <T> Optional<T> empty()
Optional<Object> empty = Optional.empty();
-
static <T> Optional<T> of(T t)
Optional<String> optional = Optional.of("哈哈");
-
static <T> Optional<T> ofNullable(T t)
Optional<Object> optional = Optional.ofNullable(null);
-
T get()
Optional<String> optional = Optional.of("哈哈");
System.out.println(optional.get());
-
boolean isPresent()
Optional<String> optional = Optional.of("哈哈");
System.out.println(optional.isPresent());
-
void ifPresent(Consumer c)
Optional<String> optional = Optional.of("abc");
optional.ifPresent(str -> System.out.println(str));
-
T orElse(T other)
Optional<String> optional = Optional.empty();
System.out.println(optional.orElse("ccc"));
-
T orElseGet(Supplier other)
Optional<String> optional = Optional.empty();
System.out.println(optional.orElseGet(() ->RandomUtil.randomString(10)));
-
T orElseThrow(Supplier exception)
Optional<String> optional = Optional.empty();
String str = optional.orElseThrow(() -> new NullPointerException());
-
Optional<T> filter(Predicate p)
Optional<Integer> optional = Optional.of(10);
Optional<Integer> integer1 = optional.filter(integer -> integer > 20);
System.out.println(integer1.isPresent());
-
Optional<U> map(Function<T, U> mapper)
Optional<String> optional = Optional.of("10");
Optional<Integer> optional1 = optional.map(Integer::valueOf);
-
Optional<U> flatMap(Function< T,Optional<U>> mapper)
Optional<Integer> optional = Optional.of(10);
Optional<Integer> optional1 = optional.flatMap(str -> Optional.of(str + 1));