咱这专业划水运动员哪里见过这问题呀,赶紧需要亲娘(度娘娘)帮助,查了下资料,再次排查了一下代码。又是一个忍不住口吐芬芳的时刻(嗯,是个狠人)…, 接下来就是见证奇迹的时刻…
optional 类从 Java 8 引入的一个很有趣的特性是 Optional 类。Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都非常了解的异常。
时刻然而我们在使用 Optional 类之前就需要判读 Optional 是否为空,如果这个为空 就会报错 java ava.util.NoSuchElementException: No value present
曾经我出现的问题编写成案例 新建一个实体public OrderItem(Comparator方法引用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 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 item =orderList.stream().filter(e -> e.getGoodsNuber() != null).max(Comparator.comparing(OrderItem ::getGoodsNuber));
如何解决
使用此方法 isPresent();为了判断查询的类对象是否存在,这里我用正则判断
Optionalitem =orderList.stream().filter(e -> e.getGoodsNuber() != null).max(Comparator.comparing(OrderItem ::getGoodsNuber)); Integer goodsNuber1 = item.isPresent()? tem1.get().getGoodsNuber() : null;



