Optionalstatic methods:
Optional.ofNullable(); Optional.empty(); Optional.of();
empty():
public static Optional empty() { @SuppressWarnings("unchecked") Optional t = (Optional) EMPTY; return t; //返回一个空的Optional } //等同于 Optional.of(null);
of()
// 非null 就继续执行 否则抛异常
public static Optional of(T value) { return new Optional(Objects.requireNonNull(value)); } public static T requireNonNull(T obj) { if (obj == null) throw new NullPointerException(); return obj; }
ofNullable()
public static Optional ofNullable(T value) { return value == null ? (Optional) EMPTY : new Optional(value); } //与of 一致的原理 只是少去了抛异常
instance methods
get() //非null就get 否则异常
public T get() { if (value == null) { throw new NoSuchElementException("No value present"); } return value; }
isPresent 与 isEmpty
public boolean isPresent() { return value != null; } public boolean isEmpty() { return value == null; }
ifPresent
public void ifPresent(Consumer action) { if (value != null) { action.accept(value); } }
//lambada
Optional integer = Optional.ofNullable(12); integer.ifPresent(new Consumer() { @Override public void accept(Integer integer) { } }); integer.ifPresent((obj)->{ System.out.println("进入执行操作"); obj++; }); System.out.println(integer.get()); // 12
// 根据是否为NULL进行操作
public void ifPresentOrElse(Consumer action, Runnable emptyAction) { if (value != null) { action.accept(value); } else { emptyAction.run(); } }
//ifPresentOrElse 实例操作
var ref = new Object() { Integer obj = 25; }; Optional
filter
public Optional filter(Predicate predicate) { Objects.requireNonNull(predicate); if (!isPresent()) { return this; } else { return predicate.test(value) ? this : empty(); } }//Predicate 是一个过滤条件 责任链模式 可以and or !等等
//filter进行以上对下进行输入 如果opt是一集合的话 , 无法进行筛选 , 只能使用集合本身进行filter
List list = Arrays.asList( Integer.parseInt("1"), Integer.parseInt("123"), Integer.parseInt("123123") ); Optional<List> opt = Optional.ofNullable(list); Stream integerStream = list.stream().filter((val) -> { return val > 25; }); System.out.println(integerStream.toList().toString()); // 可以看到filter函数 携带stream流情况下 // 以上级对下 边里内部属性// opt-> filter 的话 value是opt.get() // 如果内部进行筛选的话 ,会抛出异常 不允许进行remove // currentModifyException opt.filter((var)->{ System.out.println(var); return true; });
map()
public Optional map(Function mapper) { Objects.requireNonNull(mapper); if (!isPresent()) { return empty(); } else { return Optional.ofNullable(mapper.apply(value)); } }
取到map
List list = Arrays.asList( new String("zs,123"), new String("ls,123"), new String("ww,123") ); Optional
flatMap()
//与Map相似 多了个空处理public Optional flatMap(Function<? super T, ? extends Optional> mapper) { Objects.requireNonNull(mapper); if (!isPresent()) { return empty(); } else { @SuppressWarnings("unchecked") Optional r = (Optional) mapper.apply(value); return Objects.requireNonNull(r); } }
or()
//如果当前option value不为空 , 返回源对象, 否则返回新的对象public Optional or(Supplier<? extends Optional> supplier) { Objects.requireNonNull(supplier); if (isPresent()) { return this; } else { @SuppressWarnings("unchecked") Optional r = (Optional) supplier.get(); return Objects.requireNonNull(r); } }
stream
public Stream stream() { if (!isPresent()) { return Stream.empty(); } else { return Stream.of(value); } }
orElse() // 根据是否为空判断
public T orElse(T other) { return value != null ? value : other; }
orElseGet()// 集合Supplier
public T orElseGet(Supplier supplier) { return value != null ? value : supplier.get(); }
orElseThrow() //是空就跑异常
public T orElseThrow() { if (value == null) { throw new NoSuchElementException("No value present"); } return value; }
orElseThrow() //是空就抛出自定义异常
public T orElseThrow(Supplier exceptionSupplier) throws X { if (value != null) { return value; } else { throw exceptionSupplier.get(); } }
equals
public boolean equals(Object obj) { if (this == obj) { return true; } return obj instanceof Optional other && Objects.equals(value, other.value); }