result = optional2.orElse(value3);
System.out.println("optional2执行orElse处理后的值是"+result);
result = optional1.orElseGet(()-> new Integer(-1));
System.out.println("optional1执行orElseGet处理后的值是"+result);
result = optional2.orElseGet(()-> new Integer(-1));
System.out.println("optional2执行orElseGet处理后的值是"+result);
try {
result = optional1.orElseThrow (()-> new RuntimeException("值是空的"));
System.out.println("optional1执行orElseThrow处理后的值是"+result);
}catch (Exception e){
System.out.println("optional1的orElseThrow抛出异常:"+e.getMessage());
}
try {
result = optional2.orElseThrow (()-> new RuntimeException("值是空的"));
System.out.println("optional2执行orElseThrow处理后的值是"+result);
}catch (Exception e){
System.out.println("optional2的orElseThrow抛出异常:"+e.getMessage());
文章插图
2.3.5 过滤方法1)源码
public Optional<T> filter(Predicate<? super T> predicate) {
Objects.requireNonNull(predicate);
if (!isPresent())
return this;
else
return predicate.test(value) ? this : empty();
}
3)测试代码
public static void main(String[] args) {
Integer value1 = 5;
Integer value2 = 6;
Optional<Integer> optional1 = Optional.ofNullable(value1);
Optional<Integer> optional2 = Optional.of(value2);
Optional<Integer> result =optional1.filter(t->t > 5);
System.out.println("optional1的filter后的值:"+result);
result =optional2.filter(t->t > 5);
System.out.println("optional2的filter后的值:"+result);
文章插图
2.3.6 映射方法1)源码
public<U> Optional<U> map(Function<? super T, ? extends U> mapper) {
Objects.requireNonNull(mapper);
if (!isPresent())
return empty();
else {
return Optional.ofNullable(mapper.apply(value));
}
}
public<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper) {
Objects.requireNonNull(mapper);
if (!isPresent())
return empty();
else {
return Objects.requireNonNull(mapper.apply(value));
}
}
- map(Function<t, u=""> mapper): 如果存在一个值,则对其应用提供的映射函数 , 如果结果非空,则返回描述结果的Optional 。否则返回一个空的Optional 。
- flatMap(Function< T,Optional> mapper): 如果有值,则对其应用提供的可选映射函数,返回结果 , 否则返回空的可选函数 。这个方法类似于map(Function),但是提供的映射器的结果已经是一个可选的 , 如果调用,flatMap不会用额外的可选的包装它 。
- 区别:map会自动将u放到optional中,而flatMap则需要手动给u创建一个optional
public static void main(String[] args) {
User user1 = null;
User user2 = new User("user2名字",19);
Optional<User> optional1 = Optional.ofNullable(user1);
Optional<User> optional2 = Optional.of(user2);
System.out.println("=========map==========");
System.out.println("optional1的map前的值:"+optional1);
Optional<String> result =optional1.map(t->t.getName());
System.out.println("optional1的map后的值:"+result);
- Go 源码解读|如何用好 errors 库的 errors.Is 与 errors.As() 方法
- Optional 常用方法总结
- 92年属猴人注定的婚姻解析,要注意什么
- 手相女右手解析 教你如何看懂女人的手相
- 四种假断掌图片 手掌纹路帮解析
- 专家解析 耳再造手术大概多少钱
- 手相女右手解析什么是岛纹,跟纹路形状有关,会有一些不利影响
- 哈尔的移动城堡解析影评 哈尔的移动城堡解析?
- 住房贷款专项扣除标准是多少?住房贷款专项扣除全解析来了
- 主板的南北桥解析知识