先試下返回的Optional類有值的狀況:code
public static void main(String[] args) { List<Integer> list = Arrays.asList(10,20,30); //經過reduce方法獲得一個Optional類 int a = list.stream().reduce(Integer::sum).orElse(get("a")); int b = list.stream().reduce(Integer::sum).orElseGet(() -> get("b")); System.out.println("a "+a); System.out.println("b "+b); } public static int get(String name){ System.out.println(name+"執行了方法"); return 1; }
打印結果:get
a執行了方法 a的值:60 b的值:60
再試下返回的Optional類是空值的狀況:io
public static void main(String[] args) { List<Integer> list = Arrays.asList(); //經過reduce方法獲得一個Optional類 int a = list.stream().reduce(Integer::sum).orElse(get("a")); int b = list.stream().reduce(Integer::sum).orElseGet(() -> get("b")); System.out.println("a "+a); System.out.println("b "+b); } public static int get(String name){ System.out.println(name+"執行了方法"); return 1; }
打印結果:stream
a執行了方法 b執行了方法 a的值:1 b的值:1