java8中的Optional的使用

1
2
3
4
5
6
7
8
9
10
11
import java.util.Optional;
 
public class TestOptional {
    public static void main(String[] args) {
        TestDemo testDemo = new TestDemo();
//        testDemo.setCount(2);
        //表示的是如果不给count赋予初始值的时候,那么就会是1,否则就是赋予的初始值。
       <strong> int count3 = Optional.ofNullable(testDemo).map(item -> item.getCount()).orElse(1);</strong>
        System.out.println("count3:"+count3);
    }
}

  

运行结果:

count3:2(如果给count赋予初始值的时候),

count3:1(如果不给count赋予初始值的时候)

1
2
3
4
5
6
7
8
9
10
11
import java.util.Optional;
 
public class TestOptional {
    public static void main(String[] args) {
        TestDemo testDemo = new TestDemo();
//        testDemo.setCount(2);
        //表示的是如果不给count赋予初始值的时候,那么就会是1,否则就是赋予的初始值。
        int count3 = Optional.ofNullable(testDemo).map(item -> item.getCount()).orElseThrow(()->new RuntimeException("count没有赋予初始值"));
        System.out.println("count3:"+count3);
    }
}

  

运行结果:

Exception in thread "main" java.lang.RuntimeException: count没有赋予初始值
at com.zyq.TestOptional.lambdamain1(TestOptional.java:10)
at java.util.Optional.orElseThrow(Optional.java:290)
at com.zyq.TestOptional.main(TestOptional.java:10)

如果count赋予了初始值的,则显示赋予的初始值。

 

实际项目中使用场景:

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
package com.zyqtest;
 
import org.apache.poi.hssf.record.PageBreakRecord;
import org.apache.poi.ss.formula.functions.Choose;
 
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
 
public class Test {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("天");
        list.add("下");
        list.add("无");
        list.add("敌");
        list.add(null);
        System.out.println(list.size());
        Optional.ofNullable(list).map(obj->{
            try{
                int i = 1 / 0;
            }catch (Exception e){
                System.out.println(e.toString());
            }
           return list;
        });
        System.out.println(list.size());
    }
 
 
    public int choose(){
        if(1==2)
            return 1;
        return 2;
    }
}

  

运行结果:

5
java.lang.ArithmeticException: / by zero
5

这里要特别注意:前后都是5

posted on   ~码铃薯~  阅读(195)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
历史上的今天:
2020-06-16 子组件向父组件中传递事件、数据
2020-06-16 #Linux 系统管理命令 | top命令
2020-06-16 Linux 操作文件目录
2020-06-16 linux系统基本目录的介绍
2020-06-16 vue 组件之间的通信-父组件给子组件传递数据

导航

< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5
点击右上角即可分享
微信分享提示