簡體   English   中英

從ArrayList中刪除具有相似值的對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM