list 去重复值,(购物车的实现练习)
[解决办法]
那就别用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;
}else return false;
}
return false;
}
public int hashCode() {
return id.hashCode();
}
}
[解决办法]
建议还是写比较器、因为你的List重复的对象都是独立的。利用==比较结果都是false ,无法准确的判断是否是重复商品。
写一个比较器去判断对象内的每一个属性。把相同的结果存放在Map当中。Value 用来统计重复数量。