java.util.Optional

 1 public class OptionalDemo {
 2  
 3   public static void main(String[] args) {
 4     //创建Optional实例,也可以通过方法返回值得到。
 5     Optional<String> name = Optional.of("Sanaulla");
 6  
 7     //创建没有值的Optional实例,例如值为'null'
 8     Optional empty = Optional.ofNullable(null);
 9  
10     //isPresent方法用来检查Optional实例是否有值。
11     if (name.isPresent()) {
12       //调用get()返回Optional值。
13       System.out.println(name.get());
14     }
15  
16     try {
17       //在Optional实例上调用get()抛出NoSuchElementException。
18       System.out.println(empty.get());
19     } catch (NoSuchElementException ex) {
20       System.out.println(ex.getMessage());
21     }
22  
23     //ifPresent方法接受lambda表达式参数。
24     //如果Optional值不为空,lambda表达式会处理并在其上执行操作。
25     name.ifPresent((value) -> {
26       System.out.println("The length of the value is: " + value.length());
27     });
28  
29     //如果有值orElse方法会返回Optional实例,否则返回传入的错误信息。
30     System.out.println(empty.orElse("There is no value present!"));
31     System.out.println(name.orElse("There is some value!"));
32  
33     //orElseGet与orElse类似,区别在于传入的默认值。
34     //orElseGet接受lambda表达式生成默认值。
35     System.out.println(empty.orElseGet(() -> "Default Value"));
36     System.out.println(name.orElseGet(() -> "Default Value"));
37  
38     try {
39       //orElseThrow与orElse方法类似,区别在于返回值。
40       //orElseThrow抛出由传入的lambda表达式/方法生成异常。
41       empty.orElseThrow(ValueAbsentException::new);
42     } catch (Throwable ex) {
43       System.out.println(ex.getMessage());
44     }
45  
46     //map方法通过传入的lambda表达式修改Optonal实例默认值。 
47     //lambda表达式返回值会包装为Optional实例。
48     Optional<String> upperName = name.map((value) -> value.toUpperCase());
49     System.out.println(upperName.orElse("No value found"));
50  
51     //flatMap与map(Funtion)非常相似,区别在于lambda表达式的返回值。
52     //map方法的lambda表达式返回值可以是任何类型,但是返回值会包装成Optional实例。
53     //但是flatMap方法的lambda返回值总是Optional类型。
54     upperName = name.flatMap((value) -> Optional.of(value.toUpperCase()));
55     System.out.println(upperName.orElse("No value found"));
56  
57     //filter方法检查Optiona值是否满足给定条件。
58     //如果满足返回Optional实例值,否则返回空Optional。
59     Optional<String> longName = name.filter((value) -> value.length() > 6);
60     System.out.println(longName.orElse("The name is less than 6 characters"));
61  
62     //另一个示例,Optional值不满足给定条件。
63     Optional<String> anotherName = Optional.of("Sana");
64     Optional<String> shortName = anotherName.filter((value) -> value.length() > 6);
65     System.out.println(shortName.orElse("The name is less than 6 characters"));
66  
67   }
68  
69 }
Sanaulla
No value present
The length of the value is: 8
There is no value present!
Sanaulla
Default Value
Sanaulla
No value present in the Optional instance
SANAULLA
SANAULLA
Sanaulla
The name is less than 6 characters
原文链接: javacodegeeks 翻译: ImportNew.com - 高俊阳
译文链接: http://www.importnew.com/6675.html
原文地址:https://www.cnblogs.com/abcdefghijklmnopqrstuvwxyz/p/8405336.html