<强>本文我们介绍了Java 9选Api新增的三个方法或者方法在可选为空时返回可选的对象。ifPresentOrElse()在值存在时执行消费者参数,反之执行另一个参数回调参数。感兴趣的朋友一起看看吧! 强>
本文介绍Java 9选API新增方法。除了模块化,Java 9也给可选类增加了三个方法。
有时当可选为空时,我们想执行一些其他逻辑并也返回可选的。在Java9之前可选类仅有orElse()和orElseGet()方法,但两者都返回非包装值。
Java9引入或()方法当可选为空时返回另一个可选的。如果可选的有定义值,则传入或方法的λ不被执行:
另外当可选为空时,返回值同样是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 (); }