zoukankan      html  css  js  c++  java
  • 掌握 java 8 Optional

    3.1 创建Optinoal

    • 创建一个空的Optional Optional empty = Optional.empty();

    • 创建一个非空的Optional ,如果of参数为null则抛出空指针异常

      String str1 = "";
      Optional strOptional = Optional.of(str1);

    • 创建一个可以为空的Optional

      String str1 = null;
      Optional strOptional = Optional.ofNullable(str1);

    • optional.filter(Predicate<? super predicate)接口实现类返回true,返回this,否则或者optional对象是空 则返回 Optional.empty();

      JSONObject jsonObject = new JSONObject();
      JSONObject invoiceStatus = new JSONObject();
      invoiceStatus.put("sdf","sdf");
      jsonObject.put("invoiceStatus",invoiceStatus);
      Optional invoiceStatusJson = Optional.ofNullable(jsonObject.getJSONObject("invoiceStatus"));
      Optional optional = invoiceStatusJson.filter(json -> json.getString("sdf") != null);
      // 源码
      public Optional filter(Predicate<? super T> predicate) {
      Objects.requireNonNull(predicate);
      if (!isPresent())
      return this;
      else
      return predicate.test(value) ? this : empty();
      }

    • map(Function<? super T,? extends U> mapper)&&flatMap(Function<? super T,Optional> mapper)这两个方法很类似,都是返回一个optional,前者自动,后置需要手动创建一个

      Optional sdk = invoiceStatusJson.flatMap(json -> Optional.ofNullable(json.getString("sdk")));
      // 源码
      public Optional flatMap(Function<? super T, Optional> mapper) {
      Objects.requireNonNull(mapper);
      if (!isPresent())
      return empty();
      else {
      return Objects.requireNonNull(mapper.apply(value));
      }
      }

      Optional sdk = invoiceStatusJson.map(json -> json.getString("sdk"));
      // 源码
      public Optional map(Function<? super T, ? extends U> mapper) {
      Objects.requireNonNull(mapper);
      if (!isPresent())
      return empty();
      else {
      return Optional.ofNullable(mapper.apply(value));
      }
      }

    3.2 取optional对象里面的值

    • get() 如果optional有值则返回,没有抛出异常java.util.NoSuchElementException.

    • orElse(T other) 如果optional有值则返回,没有返回other

    • orElseGet(Supplier<? extends T> other) 如果optional有值则返回,没有返回Supplier函数接口实现类的get方法返回值

    • orElseThrow(Supplier<? extends X> exceptionSupplier) 如果有值返回,没有值抛出Supplier函数接口实现类的get方法返回的值,这个值是Throwable子类

      invoiceStatusJson.orElseThrow(() -> new NullPointerException("sd"));
      // 源码
      public T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X {
      if (value != null) {
      return value;
      } else {
      throw exceptionSupplier.get();
      }
      }

    3.3 判断optional里的值

    • isPresent() 有值返回true

      //源码
      public boolean isPresent() {
      return value != null;
      }

    • ifPresent 有值执行Consumer接口的实现类

      // 源码
      public void ifPresent(Consumer<? super T> consumer) {
      if (value != null)
      consumer.accept(value);
      }

  • 相关阅读:
    Run UliPad 4.1 Under Windows 7 64bit and wxPython 3.0.2
    Ubuntu下编译SuiteSparse-4.4.1和METIS-4.0.3
    Call Paralution Solver from Fortran
    Python调用C/Fortran混合的动态链接库-下篇
    调用gluNurbsCurve绘制圆弧
    glutBitmapCharacter及glBitmap在ATI显卡下无法正常显示的原因初探
    PyOpenGL利用文泉驿正黑字体显示中文字体
    图论常用算法之二 算法模板及建模总结
    图论常用算法之一 POJ图论题集【转载】
    通过身边小事解释机器学习是什么?
  • 原文地址:https://www.cnblogs.com/mao-yan/p/13712949.html
Copyright © 2011-2022 走看看