[英]Remove objects with similar values from ArrayList
我正在使用ArrayList,在這里我想從Arraylist中刪除具有相似值的對象。 我嘗試了許多通過stackoverflow發布的解決方案,但是由於哪些代碼不起作用,我的代碼中出現了問題。 我正在獲得帶有雙頭餅干的清單。
這是我的代碼:
public class StateCityModel {
private String id ;
private String code ;
private String name ;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof StateCityModel))
return false;
return id.equals(((StateCityModel) obj).getId());
}
@Override
public int hashCode() {
return (id == null) ? 0 : id.hashCode();
}
}
代碼在ArrayList中添加值
businessTypeListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView , View view , int position , long l) {
businessTypeObj = clubsList.get(position);
selectedBusinessTypeList.add(businessTypeObj);
}
}
});
刪除具有相似值的對象的代碼。
Set<StateCityModel> unique = new LinkedHashSet<StateCityModel>(selectedBusinessTypeList);
selectedBusinessTypeList = new ArrayList<StateCityModel>(unique);
完成上述代碼后,我在selectedBusinessTypeList中獲取具有相似值的對象。
請幫幫我,我找不到上面代碼中的錯誤。
你也可以這樣
步驟1:僅將ID不相同的那些數據插入到arraylist中,因此在此之后,您無需從arraylist中刪除重復的元素。
businessTypeListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView , View view , int position , long l) {
businessTypeObj = clubsList.get(position);
selectedBusinessTypeList.add(businessTypeObj);
}
}
});
替換為
businessTypeListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView , View view , int position , long l) {
}
StateCityModel stateCityModel = new StateCityModel();
stateCityModel = clubsList.get(position);;
if (!selectedBusinessTypeList.contains(stateCityModel)){
selectedBusinessTypeList.add(stateCityModel);
}
}
});
第二步:刪除不需要的
Set<StateCityModel> unique = new LinkedHashSet<StateCityModel>(selectedBusinessTypeList);
selectedBusinessTypeList = new ArrayList<StateCityModel>(unique);
我猜您在列表中看到重復的值了嗎? 由於selectedBusinessTypeList的引用已更改。 通過傳遞新的selectedBusinessTypeList來創建新適配器,從而更改適配器,並將該適配器再次設置為該onClick內部的listview
您可以替換代碼以通過以下幾行添加值:
businessTypeListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
businessTypeObj = clubsList.get(position);
if (!selectedBusinessTypeList.contains(businessTypeObj)) {
selectedBusinessTypeList.add(businessTypeObj);
}
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.