2013-03-08 110 views
0

如何過濾來自數組列表的唯一對象。根據包含對象的屬性值從ArrayList過濾唯一對象

List<LabelValue> uniqueCityListBasedState = new ArrayList<LabelValue>(); 
for (LabelValue city : cityListBasedState) { 
    if (!uniqueCityListBasedState.contains(city)) { 
     uniqueCityListBasedState.add(city); 
    } 
} 

這是我的代碼。但問題是我需要過濾的不是對象,而是過濾該對象內的屬性的值。在這種情況下,我需要排除具有名稱的對象。

也就是說city.getName()

+1

考慮如果可能的話使用HashMap中。 – 2013-03-08 06:17:16

+1

它不是這裏問題的數據結構。,imo – smk 2013-03-08 06:18:00

回答

1

這是解決這個問題的方法之一。

您應該覆蓋LabelValue的equals()方法和hashCode()

equals()方法應該使用name屬性,所以應該使用hashCode()方法。

然後你的代碼將工作。

PS。我假設你的LabelValue對象可以用name屬性來區分,這就是你根據你的問題似乎需要的東西。

2

假設您可以更改要設置的列表。使用Set Collection代替。

Set是一個集合,它不能包含重複的元素。

2

覆蓋的LabelValueequals()hashCode()方法(hashCode不是在這種情況下必須的):

String name; 

@Override 
public int hashCode() { 
    final int prime = 31; 
    int result = 1; 
    result = prime * result + ((name == null) ? 0 : name.hashCode()); 
    return result; 
} 

@Override 
public boolean equals(Object obj) { 
    if (this == obj) 
     return true; 
    if (obj == null) 
     return false; 
    if (getClass() != obj.getClass()) 
     return false; 
    LabelValueother = (LabelValue) obj; 
    if (name == null) { 
     if (other.name != null) 
      return false; 
    } else if (!name.equals(other.name)) 
     return false; 
    return true; 
} 
6
List<LabelValue> uniqueCityListBasedState = new ArrayList<LabelValue>(); 
     uniqueCityListBasedState.add(cityListBasedState.get(0)); 
     for (LabelValue city : cityListBasedState) { 
      boolean flag = false; 
      for (LabelValue cityUnique : uniqueCityListBasedState) {  
       if (cityUnique.getName().equals(city.getName())) { 
        flag = true;      
       } 
      } 
      if(!flag) 
       uniqueCityListBasedState.add(city); 

     } 
相關問題