Java 集合最大 NullPointerException

标签 java collections java-8 nullpointerexception max

我有 java 1.8.0_171 和 DataUtils.java 类中的以下代码:

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)) {
    .....
            } 

我有以下异常(exception):

Exception in thread "main" java.lang.NullPointerException at java.util.Collections.max(Unknown Source) at com.util.DataUtils.calculateRetsentindex(DataUtils.java:23)

默认的 jdk 在 Eclipse 上设置正确,clean-rebuild 没有修复。求指教

最佳答案

这意味着您可能在您的集合中添加了一个空元素。在你的例子中:

 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");
          } 

它正确地打印“OK”。但是,如果您将第一个对象更改为 null:

list.add(null);

您会遇到与您类似的异常。

如果您执行 Collections.max(null);,您会得到完全相同的异常。所以我猜你的列表在你打电话时没有初始化。

关于Java 集合最大 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51245296/

相关文章:

java - Collections.emptyList() 与新实例

将每个元素映射到该元素的字段的 Java Collection

loops - 将循环内的复杂条件逻辑转换为流和 lambda

Java 8 可完成的 future

java - shutdownHooks RuntimePermission 的作用是什么?

java - 将字符串从 Java 发送到 Arduino(简单示例)

Java 按同一字段对项目进行两次排序

java - 通过 SSL 连接到 Web 服务时为 "Invalid encoding for NameConstraintsExtension"

java - 生成 gradle java 应用程序的 dockerfile

java - 使用java 8流根据某些标准读入1个文件并写出3个文件