Java8中空指针问题解决 java ava.util.NoSuchElementException: No value present

Java8中空指针问题解决

别提了,正在划水的我,突然被领导丢一个日志截图 No value present

咱这专业划水运动员哪里见过这问题呀,赶紧需要亲娘(度娘娘)帮助,查了下资料,再次排查了一下代码。又是一个忍不住口吐芬芳的时刻(嗯,是个狠人)…, 接下来就是见证奇迹的时刻…

optional 类

从 Java 8 引入的一个很有趣的特性是 Optional 类。Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都非常了解的异常。

🐂🍺时刻

然而我们在使用 Optional 类之前就需要判读 Optional 是否为空,如果这个为空 就会报错 java ava.util.NoSuchElementException: No value present

曾经我出现的问题编写成案例

新建一个实体

 public OrderItem(Comparator<Integer> comparator) {
 
    private String id;
    private String goodsName;
    private Integer goodsNuber;

   //无参构造方法
    public OrderItem() {
    }
    //构造方法
    public OrderItem(String id, String goodsName, Integer goodsNuber) {
        this.id = id;
        this.goodsName = goodsName;
        this.goodsNuber = goodsNuber;
    }
}

方法引用

 public void goodsOrder() {
     //放入几个参数
    ArrayList<OrderItem> orderList = new ArrayList<>();
        orderList.add(new OrderItem("1", "苹果", null));
        orderList.add(new OrderItem("1", "苹果", null));
        orderList.add(new OrderItem("2", "香蕉", null));

   //求取GoodsNuber的最大值   -->此时这个方法就会抛出异常
        Integer goodsNuber12 = orderList.stream().filter(e -> e.getGoodsNuber() != null).max(Comparator.comparing(OrderItem::getGoodsNuber)).get().getGoodsNuber();
}

控制台输出

java.util.NoSuchElementException: No value present
	at java.util.Optional.get(Optional.java:135)

解析报错

//错误点就是   get() 这里,  因为 Optional为null,再get值肯定报错
        Optional<OrderItem> item =orderList.stream().filter(e -> e.getGoodsNuber() != null).max(Comparator.comparing(OrderItem ::getGoodsNuber));

如何解决

使用此方法 isPresent();为了判断查询的类对象是否存在,这里我用正则判断

        Optional<OrderItem> item =orderList.stream().filter(e -> e.getGoodsNuber() != null).max(Comparator.comparing(OrderItem ::getGoodsNuber));
        Integer goodsNuber1 = item.isPresent()? tem1.get().getGoodsNuber() : null;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值