package com.hierway.pmcs.marm.test; import com.hierway.pmcs.marm.entity.Requisition; import com.hierway.utility.api.result.ApiException; import com.hierway.utility.api.result.ResultCode; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Optional; /** * @Description * @Author by mocar小师兄 * @Date 2020/9/10 10:29 **/ public class PSVMTest { public static void main(String[] args) { System.out.println("---------- testOfNullable -----------"); testOfNullable(); System.out.println("---------- testIfPresent -----------"); testIfPresent(); System.out.println("---------- testOrElse -----------"); testOrElse(); System.out.println("---------- testOrElseGet -----------"); testOrElseGet(); System.out.println("---------- testOrElseThrow -----------"); testOrElseThrow(); System.out.println("---------- testFilter -----------"); testFilter(); System.out.println("---------- demoTest -----------"); demoTest(); } private static void demoTest(){ String hel = null; String aThrow = Optional.ofNullable(hel).map(a -> a + "kkk") .map(b -> b + "mmm") .orElseThrow(() -> new IllegalStateException("为空")); System.out.println(aThrow); } private static void testOfNullable(){ //Optional.of()或者Optional.ofNullable():建立Optional对象,差异在于of不容许参数是null,而ofNullable则无限制。 // List<String> testList = new ArrayList<>(); // List<String> testList = null; // List<String> testList = Arrays.asList("a","111","sda"); Optional<Object> optionalO = Optional.ofNullable(null); List<String> testList = new ArrayList<>(); Optional<Object> optionalO2 = Optional.ofNullable(testList); //isPresent():判断值是否存在 System.out.println("判断值是否为null:" + optionalO.isPresent()); System.out.println("判断值是否为null:" + optionalO2.isPresent()); } private static void testIfPresent(){ //对象不为null 则调用consumer对象 ,不然不调用 List<String> testList2 = Arrays.asList("a","111","sda"); Optional.ofNullable(testList2).ifPresent((consumer)-> System.out.println("对象不为null,执行consumer对象逻辑" + consumer)); Optional.ofNullable(testList2).ifPresent((consumer)-> { for (String s : consumer) { System.out.println(s); } }); List<Requisition> testList3 = new ArrayList<>(); Requisition requisition1 = Requisition.builder().id("id1").appointerId("appointerId1").createTime(LocalDateTime.now()).build(); Requisition requisition2 = Requisition.builder().id("id2").appointerId("appointerId2").createTime(LocalDateTime.now()).build(); testList3.add(requisition1); testList3.add(requisition2); Optional.ofNullable(testList3).ifPresent((consumer)-> { for (Requisition requisition : consumer) { System.out.println(requisition); } }); } private static void testOrElse(){ List<String> testList = null; if (1 ==0){ testList = Arrays.asList("aa","bb"); } List<String> testList2 = Arrays.asList("mm"); //若是optional对象保存的值不是null,则返回原来的值,不然返回value,若是为空则取else的值 System.out.println(Optional.ofNullable(20).orElse(100)); List<String> orElseList = Optional.ofNullable(testList).orElse(testList2); System.out.println(orElseList); } private static void testOrElseGet(){ //若是optional对象保存的值不是null,则返回原来的值,不然返回value,若是为空则执行else对象方法(return对象) List<String> testList = null; if (1 ==0){ testList = Arrays.asList("aa","bb"); } List<String> orElseGetList = Optional.ofNullable(testList).orElseGet(() -> { List<String> testList2 = Arrays.asList("mm"); return testList2; }); System.out.println(orElseGetList); } private static void testOrElseThrow(){ //值为null则抛出异常,存在则什么不作,有点相似Guava的Precoditions List<String> testList = null; if (1 == 0){ testList = Arrays.asList("aa","bb"); } try { Optional.ofNullable(testList).orElseThrow(()->new IllegalStateException("参数为空")); } catch(IllegalStateException e ) { e.printStackTrace(); } } private static void testFilter(){ //值为null则抛出异常,存在则什么不作,有点相似Guava的Precoditions List<String> testList = Arrays.asList("aa","bb"); Optional<List<String>> optional = Optional.ofNullable(testList).filter((aa) -> aa.contains("aa")); System.out.println(optional.isPresent()); System.out.println(optional.get()); boolean present = Optional.ofNullable(1).filter(aa -> aa.intValue() == 2).isPresent(); System.out.println(present); } }