[英]Java Collections max NullPointerException
I have java 1.8.0_171 and the following code in DataUtils.java class:我在 DataUtils.java 类中有 java 1.8.0_171 和以下代码:
List<BigDecimal> list = new ArrayList<>();
list.add(new BigDecimal(0));
list.add(new BigDecimal(-2));
list.add(new BigDecimal(10));
list.add(new BigDecimal(200));
if ((Collections.max(list).subtract(Collections.min(list)).compareTo(new BigDecimal(0)) != 0)) {
.....
}
And I have the following exception:我有以下例外:
Exception in thread "main" java.lang.NullPointerException at java.util.Collections.max(Unknown Source) at com.util.DataUtils.calculateRetsentindex(DataUtils.java:23)
com.util.DataUtils.calculateRetsentindex(DataUtils.java:23) 处的 java.util.Collections.max(Unknown Source) 处的线程“main”java.lang.NullPointerException 中的异常
The default jdk is set on Eclipse correctly, clean-rebuild don't fix. Eclipse 上的默认 jdk 设置正确,clean-rebuild 无法修复。 Please, advice
请指教
This means that in your collection you probably have added a null element.这意味着在您的集合中您可能添加了一个空元素。 In your example:
在你的例子中:
List<BigDecimal> list = new ArrayList<>();
list.add(new BigDecimal(0));
list.add(new BigDecimal(-2));
list.add(new BigDecimal(10));
list.add(new BigDecimal(200));
if ((Collections.max(list).subtract(Collections.min(list)).compareTo(new BigDecimal(0)) != 0)) {
System.out.println("OK");
}
It prints "OK" properly.它正确打印“OK”。 If you change the first object to null though:
如果您将第一个对象更改为 null:
list.add(null);
You get similar exception to yours.你得到了与你类似的例外。
And if you do Collections.max(null);
如果你做
Collections.max(null);
you get the exact same exception.你得到完全相同的例外。 So I guess your list is not initialized when you do the call.
所以我猜你的列表在你打电话时没有初始化。
null
elements out, before ::max
them:::max
之前过滤掉null
元素:import static java.util.Comparator.naturalOrder;
...
list.stream()
.filter(Objects::nonNull)
.max(naturalOrder())
.orElse(null);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.