2017-05-09 64 views
-1

我有一個ArrayList的節點。 Node類別的其中一個字段爲level查找ArrayList中最大的對象字段<Object>

我想找到列表中具有最大級別的節點的級別。

此代碼給了我一個NullPointerException異常...

private int findMaxLevel(ArrayList<Node> nodes) 
{ 
    int level = 0; 
    for(Node node : nodes) 
    { 
     if(node.getLevel() > level) 
     { 
      level = node.getLevel(); 
     } 
    } 
    return level; 
} 

我已經試過這頁的幾種實現方式:Sorting an ArrayList of Contacts based on name?但我沒有找到解決方案。

編輯:

謝謝你的建議,水平不應該是零,但我忘了在Node類的構造函數添加this.level = level ....

+0

你確定你的所有節點都有一個級別分配嗎? –

+0

if(node!= null && node.getLevel()> level) – Tobi

+3

顯示'Node'的實現和一個給出錯誤的最小完整代碼。 –

回答

0

什麼是空引用?例外說什麼? 無論如何,這塊代碼中唯一的參考是nodes,所以我假設它是這樣的(getLevel()返回int類型是不可爲空的) 也許您在創建它之前發送ArrayList<Node>?也許你正在使用的功能,像這樣的地方:

findMaxLevel(null); 

ArrayList<Node> nodes = null; // Something like that 
findMaxLevel(nodes); 
0

把分開的NPE ...

可以實現在Node類可比和使用集合.max獲取列表中的最大元素。

int max = Collections.max(a); 
System.out.println(max); 

但爲什麼壓倒一切可比:?

Collections.max()實現爲:

public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll) { 
    Iterator<? extends T> i = coll.iterator(); 
    T candidate = i.next(); 

    while (i.hasNext()) { 
     T next = i.next(); 
     if (next.compareTo(candidate) > 0) 
      candidate = next; 
    } 
    return candidate; 
} 

這樣的compareTo將被稱爲找到max element

+0

不是。重寫'equals'不會定義一個訂單。你想實現'Comparable'來使'Collections.max()'工作! –

+0

@GroroGearless好眼睛!謝謝!!!! –

0

您可以使用stream API爲。我假設你的節點類有一個intlevel

class Node { 
      private int level; 
      public int getLevel() { 
       return level; 
      } 
      public void setLevel(int level) { 
       this.level = level; 
      } 
} 

現在我們需要找出一個List格言水平Nodes

Optional<Integer> maxLevel = nodes.stream().filter(Objects::nonNull) 
       .map(Node::getLevel).max(Comparator.<Integer>naturalOrder()); 

我希望這有助於。

0

讓事情簡單與這一個班輪:

Node max = nodes.stream() 
        .filter(Objects::nonNull) 
        .max((Node node, Node t1) -> t1.level < node.level ? 1 : -1) 
        .get(); 

確保檢查,看看列表是空的第一或使用Optional,否則你可能會得到一個NoSuchElementException。

相關問題