checkBox多选时,重写hasCode()方法和equal()方法对实体类的增加和移除

来源:互联网 发布:linux file 文件编码 编辑:程序博客网 时间:2024/06/01 09:10

以前我们的需求是:当我们对实体类选中checkBox时,加入list里执行add()方法,取消时,则在list移除,执行remove()方法,它们操作的是同一个实体对象。
现在我们的需求是:我们选中checkBox时,取它的部分属性加入另外的实体对象,没选中则移除。

一、在adapter里定义接口,在activity里实现接口setItemSelect();

private Set<OrderDestBean> selectList=new HashSet();@Override    public void setItemSelect(ShopcarBean shopCar) {        OrderDestBean bean = new OrderDestBean();        bean.setAmount(shopCar.getCash());        bean.setNum(shopCar.getNum());        if (shopCar.isSelect()) {            selectList.add(bean);            cashId.add(shopCar.getId());            accountAll += Integer.parseInt(bean.getAmount());        } else {            accountAll -= Integer.parseInt(bean.getAmount());            selectList.remove(bean);            cashId.remove(shopCar.getId());        }    }

这样,我们移除OrderDestBean时,会移除不掉,而且会增加相同的元素,因为我们每次都重新new了一个OrderDestBean对象,他们操作的不是同一个对象,按照之前的想法,我会想到遍历list了,现在有了一种新的思路,新的方法可以实现,那就是重写OrderDestBean 的equal()、hasCode()方法。

@Override    public int hashCode() {        //      return 12345;        final int prime = 31;        int result = 1;        result = prime * result + ((this.num == null) ? 0 : this.num.hashCode());        return result;    }    @Override    public boolean equals(Object o) {        if(o.getClass()!=OrderDestBean.class){        return false;        }        OrderDestBean obj=(OrderDestBean)o;        if(this.num.equal(obj.getNum())){        return true;        }        retrurn false;    }

这样就完美的解决了上面所说的问题。

0 0
原创粉丝点击