0

我将如何从数组列表中过滤唯一对象。

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

这是我的代码。但问题是我需要过滤的不是对象,而是该对象内的属性值。在这种情况下,我需要排除具有该名称的对象。

那是city.getName()

4

4 回答 4

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);

        }
于 2013-03-08T07:44:20.633 回答
2

假设您可以更改要设置的列表。

请改用集合集合

Set 是一个不能包含重复元素的集合。

于 2013-03-08T06:20:56.543 回答
2

覆盖(在这种情况下不是必须的)的equals()andhashCode()方法:LabelValuehashCode

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;
}
于 2013-03-08T06:57:25.763 回答
1

这是解决它的一种方法。

您应该覆盖 LabelValue 的equals()方法和hashCode()

equals()方法应该使用name属性,方法也应该使用hashCode()

然后你的代码就可以工作了。

PS。我假设您的 LabelValue 对象可以仅通过 name 属性来区分,这正是您根据您的问题似乎需要的。

于 2013-03-08T06:15:42.740 回答