Java 9选API新增方法

  <强>本文我们介绍了Java 9选Api新增的三个方法或者方法在可选为空时返回可选的对象。ifPresentOrElse()在值存在时执行消费者参数,反之执行另一个参数回调参数。感兴趣的朋友一起看看吧!   

本文介绍Java 9选API新增方法。除了模块化,Java 9也给可选类增加了三个方法。   
   Java 9选API新增方法

     <强> 1。或方法   

有时当可选为空时,我们想执行一些其他逻辑并也返回可选的。在Java9之前可选类仅有orElse()和orElseGet()方法,但两者都返回非包装值。   
Java9引入或()方法当可选为空时返回另一个可选的。如果可选的有定义值,则传入或方法的λ不被执行:

  <>以前@Test   public  void  givenOptional_whenPresent_thenShouldTakeAValueFromIt (), {//给定   String  expected =,“properValue";   Optional  value =, Optional.of(预期);   Optional  defaultValue =, Optional.of (“default");//当   Optional  result =, value.or ((),→, defaultValue);//然后   为了(result.get ()) .isEqualTo(预期);   }   

另外当可选为空时,返回值同样是defaultValue:

  <>以前@Test   public  void  givenOptional_whenEmpty_thenShouldTakeAValueFromOr (), {//才能给   String 才能;defaultString =,“default";   Optional 才能;value =, Optional.empty ();   Optional 才能;defaultValue =, Optional.of (defaultString);   ,,//才能当   Optional 才能;result =, value.or ((),→, defaultValue);   ,,//,然后才能   为了才能(result.get ()) .isEqualTo (defaultString);   }      <强> 2。ifPresentOrElse方法   

假设有个可选实例,通常我们需要对其包装的值执行特定业务,同时如果可选实例为空时需增加一些度量用于记录或跟踪该事实。

  

ifPresentOrElse()方法就是为该场景而创建。我们可以传入一个消费者用于执行可选存在时,而运行的用于在可选为空时执行。

  

下面示例中,可选的存在,我们需要在值存在时增加特定计数器:

  <>以前@Test   public  void  givenOptional_whenPresent_thenShouldExecuteProperCallback (), {//才能给   Optional 才能;value =, Optional.of (“properValue");   AtomicInteger 才能;successCounter =, new  AtomicInteger (0);   AtomicInteger 才能;onEmptyOptionalCounter =, new  AtomicInteger (0);   ,,//才能当   value.ifPresentOrElse才能(   ,,v →, successCounter.incrementAndGet (),,   ,,onEmptyOptionalCounter: incrementAndGet);   ,,//,然后才能   为了才能(successCounter.get ()) .isEqualTo (1);   为了才能(onEmptyOptionalCounter.get ()) .isEqualTo (0);   }   

注意,传入的回调参数没有被执行,下面看如何可选为空时,回调参数将会执行:

  <>以前@Test   public  void  givenOptional_whenNotPresent_thenShouldExecuteProperCallback (), {//才能给   Optional 才能;value =, Optional.empty ();   AtomicInteger 才能;successCounter =, new  AtomicInteger (0);   AtomicInteger 才能;onEmptyOptionalCounter =, new  AtomicInteger (0);   ,,//才能当   value.ifPresentOrElse才能(   ,,v →, successCounter.incrementAndGet (),,   ,,onEmptyOptionalCounter: incrementAndGet);   ,,//,然后才能   为了才能(successCounter.get ()) .isEqualTo (0);   为了才能(onEmptyOptionalCounter.get ()) .isEqualTo (1);   }      <强> 3。流方法   

最后一个方法,Java 9给可选类增加的流()方法。

  

Java有非常流畅,优雅的流Api,用于操作集合实现函数式编程概念. Java 9在可选类中引入流()方法,让我们把可选实例视为流。

  

加入我们定义了一个可选的,并执行它的流()方法,则会创建一个元素的流,使得流的所有的Api都可以使用:

  <>以前@Test   public  void  givenOptionalOfSome_whenToStream_thenShouldTreatItAsOneElementStream (), {//才能给   Optional 才能;value =, Optional.of (“a");   ,,//才能当   List 才能;collect =, value.stream () . map(字符串::包含).collect (Collectors.toList ());   ,,//,然后才能   为了才能(收集).hasSameElementsAs (List.of (“A"));   }   

另外,可选不存在时,调用流方法返回空流:

  <>以前@Test   public  void  givenOptionalOfNone_whenToStream_thenShouldTreatItAsZeroElementStream (), {//才能给   Optional 才能;value =, Optional.empty ();   ,,//才能当   List 才能;collect =, value.stream ()   ,,. map(字符串::包含)   ,,.collect (Collectors.toList ());   ,,//,然后才能   为了才能(收集).isEmpty ();   }

Java 9选API新增方法