public T get() { if (value == null) { throw new NoSuchElementException("No value present"); } return value; }
isPresent()方法
很简单,判断值是否不为null
public boolean isPresent() { return value != null; }
ifPresent(Consumer<? super T> consumer)方法
当值不为null时,执行consumer
public void ifPresent(Consumer<? super T> consumer) { if (value != null) consumer.accept(value); }
举个例子,ifPresent方法执行Lambda表达式,将值转换为大写并打印:
package optional; import java.util.Optional; public class Snippet { public static void main(String[] args) { Optional<String> test = Optional.ofNullable("abcDef"); //值不为null,执行Lambda表达式, test.ifPresent(name -> { String s = name.toUpperCase(); System.out.println(s); }); //打印ABCDEF } }
filter(Predicate<? super T> predicate)方法
看方法名就知道,该方法是过滤方法,过滤符合条件的Optional对象,这里的条件用Lambda表达式来定义,
如果入参predicate对象为null将抛NullPointerException异常,
如果Optional对象的值为null,将直接返回该Optional对象,
如果Optional对象的值符合限定条件(Lambda表达式来定义),返回该值,否则返回空的Optional对象
源码如下:
public Optional<T> filter(Predicate<? super T> predicate) { Objects.requireNonNull(predicate); if (!isPresent()) return this; else return predicate.test(value) ? this : empty(); }
使用示例: