2015-12-29 3 views
0

Я пытаюсь сравнить два списка одинаковых объектов, эти два списка: nodes_cc и nodes_volume. Они содержат несколько объектов Node. A Node is, определяемый ID и VALUE. Узлы в двух списках могут иметь общие идентификаторы, но не общие значения.Java: сравнить два списка объектов

Я хочу сравнить списки следующим образом: я управляю списком первого списка (nodes_cc), если я встречаю узел, который не отображается во втором списке (nodes_volume), элемент управления ДОЛЖЕН остановиться, даже если я найти другие узлы, которые принадлежат даже ко второму списку. Я думал использовать перерыв, так что я попытался это:

int count=0; 

for (int i=0;i<cc_nodes.size();i++){ 
    Node node = cc_nodes.get(i); 
    for(int j=0;j<volume_nodes.size();j++){  
     Node node2 = volume_nodes.get(j); 
     if (node.id==node2.id){ 
      count++;      
     } 
     else { 
      break;   
     }  
    } 
} 

Проблема заключается в следующем: для цикла перерывы только после первой проверки (счетчик 1), где я делаю неправильно? Можете ли вы помочь мне исправить это?

ответ

1

Вы могли бы использовать некоторые булево, и проверить его после вашего внутреннего for цикла:

int count=0; 

    for (int i=0;i<cc_nodes.size();i++){ 

     Node node = cc_nodes.get(i); 
     boolean found = false; 

     for(int j=0;j<volume_nodes.size();j++){  
      Node node2 = volume_nodes.get(j); 
      if (node.id==node2.id){ 
       count++; 
       found = true;   
      } 

     } 

     if(!found) 
      break;  

    } 
+0

Thc но doesen't приста ks, для неподвижной остановки после 1 шага ç_ç – Removed

+0

Каков тип «идентификатора» узла? – Berger

+0

Кажется, что это не так, как если бы с равными, я встретил ошибку «int не может быть разыменован» – Removed

0

Вы можете Override .equals() и .hashcode() метод в объекте Node использовать идентификатор в качестве компаратора, а затем:

int count=0; 

for (Node node : cc_nodes){ 
    if(volume_nodes.contains(node)) 
     count++; 
    else 
     break; 
} 

Вы можете добавить это в объект Node (если идентификатор INT значение)

@Override 
public int hashCode() { 
    final int prime = 31; 
    int result = 1; 
    result = prime * result + id; 
    return result; 
} 

@Override 
public boolean equals(Object obj) { 
    if (this == obj) 
     return true; 
    if (obj == null) 
     return false; 
    if (getClass() != obj.getClass()) 
     return false; 
    Node other = (Node) obj; 
    if (id != other.id) 
     return false; 
    return true; 
} 
+0

Я не могу использовать, потому что два списки могут иметь узлы с общим ID, но не общие значения. Узлы первого списка имеют все значения int, а во втором - все значения double. Таким образом, contains всегда будет возвращать false. – Removed

+0

, если вы не переопределяете значение равно в объекте узла –

Смежные вопросы