簡體   English   中英

Java 集合最大 NullPointerException

[英]Java Collections max NullPointerException

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

我有以下例外:

com.util.DataUtils.calculateRetsentindex(DataUtils.java:23) 處的 java.util.Collections.max(Unknown Source) 處的線程“main”java.lang.NullPointerException 中的異常

Eclipse 上的默認 jdk 設置正確,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); 你得到完全相同的例外。 所以我猜你的列表在你打電話時沒有初始化。

::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM