• 掌握 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);
      }

  • 相关阅读:
    jenkins学习:jenkins+maven
    git学习
    jenkins学习:jenkins+gitlab
    mongodb安装和运行
    ideaJ+maven+javaweb实践: sevlet实现upload&download,javaIO代码
    pageObject学习
    postman接口测试
    TODO 软件测试68题
    testng优化:失败重跑,extentReport+appium用例失败截图,测试报告发邮件
    testng报告-extentsReports使用-klov
  • 原文地址:https://www.cnblogs.com/mao-yan/p/13712949.html
Copyright © 2020-2023  润新知