2014-09-11 2 views
-2

У меня есть следующая простая java-программа для сравнения двух объектов в списке.Сравнение двух объектов списка в java

public static void main(String[] args) 
    { 

     UserInfo user=new UserInfo(); 

     user.setDomainId(2); 
     user.setId("sxpadmin"); 
     user.setStatus("active"); 



     UserInfo user1=new UserInfo(); 

     user1.setDomainId(2); 
     user1.setId("sxpadmin"); 
     user1.setStatus("active"); 

     System.out.println(user.equals(user1)); 

     List<UserInfo> userinfo=new ArrayList<UserInfo>(); 

     userinfo.add(user); 
     userinfo.add(user1); 

     HashSet<UserInfo> set = new HashSet<UserInfo>(); 

     for (UserInfo temp : userinfo) 
     { 
      if(set.contains(temp)){ 
       System.out.println("same"); 
      } 
      else{ 
       System.out.println("different"); 
       set.add(temp); 
      } 
     } 
    } 

Теперь я сравниваю два объекта, и он должен принимать, если блок, поскольку содержимое обоих объектов одинаково.

Я повторяю объект userinfo и объединяю его элементы, а также добавляю его к set, надеясь избежать дубликатов. Но ни один из них не работал. Помогите мне в решении этого.

Hashcode и equals методы UserInfo являются

@Override 
public int hashCode() { 
    final int prime = 31; 
    int result = 1; 
    result = prime * result + customer_id; 
    result = prime * result 
      + ((domainId == null) ? 0 : domainId.hashCode()); 
    result = prime * result 
      + ((last_name == null) ? 0 : last_name.hashCode()); 
    result = prime * result + ((id == null) ? 0 : id.hashCode()); 
    result = prime * result 
      + ((first_name == null) ? 0 : first_name.hashCode()); 
    // Added by Sandip on 04 Jan 2013 for 2 FA 
    result = prime * result 
      + ((seed_value == null) ? 0 : seed_value.hashCode()); 
    // End added by Sandip on 04 Jan 2013 for 2 FA 
    return result; 
} 

@Override 
public boolean equals(Object obj) { 
    if (this == obj) 
     return true; 
    if (obj == null) 
     return false; 
    if (getClass() != obj.getClass()) 
     return false; 
    UserInfo other = (UserInfo) obj; 
    if (customer_id != other.customer_id) 
     return false; 
    if (last_name == null) { 
     if (other.last_name != null) 
      return false; 
    } else if (!last_name.equals(other.last_name)) 
     return false; 
    if (id == null) { 
     if (other.id != null) 
      return false; 
    } else if (!id.equals(other.id)) 
     return false; 
    if (first_name == null) { 
     if (other.first_name != null) 
      return false; 
    } else if (!first_name.equals(other.first_name)) 
     return false; 
    // Added by Sandip on 04 Jan 2013 for 2 FA 
    if (seed_value == null) { 
     if (other.seed_value != null) 
      return false; 
    } else if (!seed_value.equals(other.seed_value)) 
     return false; 
    // End added by Sandip on 04 Jan 2013 for 2 FA 
    if (domainId == null) { 
     if (other.domainId != null) 
      return false; 
    } else if (!domainId.equals(other.domainId)) 
     return false; 

    return true; 
} 
+0

Как реализованы методы 'equals' и' hashCode' 'UserInfo'? –

+0

Внесите свой собственный компаратор, чтобы сделать это простым и аккуратным. – StackFlowed

+0

Вы смотрите на [CollectionUtils.subtract] (http://commons.apache.org/proper/commons-collections/javadocs/api-3.2.1/org/apache/commons/collections/CollectionUtils.html#subtract%28java .util.Collection,% 20java.util.Collection% 29)? – yunandtidus

ответ

0

Если вы хотите создать рабочее решение, вот что вы должны переопределить и метод равных Hashcode. Многие IDE имеют функцию автогенерации этих методов для выбранного класса. После код UserInfo показывает методы, сгенерированные IntelliJ:

public class UserInfo { 
    private int domainId; 
    private String id; 
    private String status; 

    public void setDomainId(int domainId) { 
     this.domainId = domainId; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public void setStatus(String status) { 
     this.status = status; 
    } 

    public String getStatus() { 
     return status; 
    } 

    @Override 
    public boolean equals(Object o) { 
     if (this == o) return true; 
     if (o == null || getClass() != o.getClass()) return false; 

     UserInfo userInfo = (UserInfo) o; 

     if (domainId != userInfo.domainId) return false; 
     if (id != null ? !id.equals(userInfo.id) : userInfo.id != null) return false; 
     if (status != null ? !status.equals(userInfo.status) : userInfo.status != null) return false; 

     return true; 
    } 

    @Override 
    public int hashCode() { 
     int result = domainId; 
     result = 31 * result + (id != null ? id.hashCode() : 0); 
     result = 31 * result + (status != null ? status.hashCode() : 0); 
     return result; 
    } 

} 

Важно помнить, что если определенный класс не реализует эти методы, то хэш-код возвращает хэш объектов адрес в памяти и равно использует версию этого по умолчанию хэш-код ,

Вложенный код выше работает с введенным вами кодом. Мой выход:

true 
different 
same 
+0

спасибо. это сработало. – Saha

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