日期:2014-05-18  浏览次数:20565 次

list 去重复值,(购物车的实现练习)



public String addGoodsToCar() throws Exception {
        int id = Integer.parseInt(goodsid);

Goods mycargoods = goodsService.getGoods(id);
list.add(mycargoods);// 更新list

ActionContext.getContext().getSession()
.put("mycarlist", list);// 更新session

ActionContext.getContext().getSession().put("mycarsize", list.size());
mycarsize = list.size();

System.out.println("listsize=" + list.size());

return super.execute();
}


怎样去除list中的重复的对象?
我的页面显示(我想去除重复的对象,并显示重复的对象的个数,求解!!)
jsp java?j2ee 对象

------解决方案--------------------
那就别用List了, 用Map ,用Goods当key , value为数量。

添加商品的时候,先从Map中判断是否已存在该Goods ,如果存在就将该Goods的value+1,否则就添加新的Goods进入Map,value=1

要注意的是重写Goods对象的equalse与hashCode 。那要看你有具体怎么去设计了, 如果你的Goods只有一个名字,并没有其他什么参数,比如颜色/大小 等, 那么可以直接用Id或名字来判断,否则就要将这些属性都对应进行比较。
------解决方案--------------------

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

public class ListTest1 {

/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub

List<ObjectItem> list = new ArrayList<ObjectItem>();
list.add(new ObjectItem(2));
list.add(new ObjectItem(2));
list.add(new ObjectItem(2));
list.add(new ObjectItem(3));

Set<ObjectItem> s = new HashSet<ObjectItem>();
for(ObjectItem o : list){
s.add(o);
}

Iterator<ObjectItem> it = s.iterator();
while(it.hasNext()){
System.out.println(it.next().getId());
}

}

}

class ObjectItem {
private Integer id;

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public ObjectItem(Integer id){
this.id = id;
}

public boolean equals(Object obj) {
        if(obj instanceof ObjectItem) {
         ObjectItem n = (ObjectItem)obj;
            if(id == n.id) {
                return true;