JAVA8 optional用法
# JAVA8 optional用法
public class Test2 {
public static void main(String[] args) {
//创建 Optional 实例,也可以通过方法返回值得到。
Optional<String> name = Optional.of("Sanaulla");
//创建没有值的 Optional 实例,例如值为'null'
Optional empty = Optional.ofNullable(null);
//isPresent 方法用来检查 Optional 实例是否有值。
if (name.isPresent()) {
//调用 get()返回 Optional 值。
System.out.println(name.get());
}
try {
//在 Optional 实例上调用 get()抛出 NoSuchElementException。
System.out.println(empty.get());
} catch (NoSuchElementException ex) {
System.out.println(ex.getMessage());
}
//ifPresent 方法接受 lambda 表达式参数。
//如果 Optional 值不为空,lambda 表达式会处理并在其上执行操作。
name.ifPresent((value) -> {
System.out.println("The length of the value is: " + value.length());
});
//如果有值 orElse 方法会返回 Optional 实例,否则返回传入的错误信息。
System.out.println(empty.orElse("There is no value present!"));
System.out.println(name.orElse("There is some value!"));
//orElseGet 与 orElse 类似,区别在于传入的默认值。
//orElseGet 接受 lambda 表达式生成默认值。
System.out.println(empty.orElseGet(() -> "Default Value"));
System.out.println(name.orElseGet(() -> "Default Value"));
try {
//orElseThrow 与 orElse 方法类似,区别在于返回值。
//orElseThrow 抛出由传入的 lambda 表达式/方法生成异常。
//此处为手动写的异常,不做扩展
//empty.orElseThrow(ValueAbsentException::new);
} catch (Throwable ex) {
System.out.println(ex.getMessage());
}
//map 方法通过传入的 lambda 表达式修改 Optonal 实例默认值。
//lambda 表达式返回值会包装为 Optional 实例。
Optional<String> upperName = name.map((value) -> value.toUpperCase());
System.out.println(upperName.orElse("No value found"));
//flatMap 与 map(Funtion)非常相似,区别在于 lambda 表达式的返回值。
//map 方法的 lambda 表达式返回值可以是任何类型,但是返回值会包装成 Optional 实例。
//但是 flatMap 方法的 lambda 返回值总是 Optional 类型。
upperName = name.flatMap((value) -> Optional.of(value.toUpperCase()));
System.out.println(upperName.orElse("No value found"));
//filter 方法检查 Optiona 值是否满足给定条件。
//如果满足返回 Optional 实例值,否则返回空 Optional。
Optional<String> longName = name.filter((value) -> value.length() > 6);
System.out.println(longName.orElse("The name is less than 6 characters"));
//另一个示例,Optional 值不满足给定条件。
Optional<String> anotherName = Optional.of("Sana");
Optional<String> shortName = anotherName.filter((value) -> value.length() > 6);
System.out.println(shortName.orElse("The name is less than 6 characters"));
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
编辑 (opens new window)
上次更新: 2024/01/26, 05:03:22
- 01
- python使用生成器读取大文件-500g09-24
- 02
- Windows环境下 Docker Desktop 安装 Nginx04-10
- 03
- 使用nginx部署多个前端项目(三种方式)04-10