我用list接收对象数组,对象里的元素包含有名称 价格,我怎么把名称相同的数据合并成一个并且不丢失名称不同的~
举个例子,1,鞋子,200元,2双; 2, 袜子,20元,4双; 3,鞋子,200元,4双;4, 袜子,20元,4双;
我需要得到的结果是1,鞋子,200元,6双;2,袜子,20元,8双;希望高人指点一下
举个例子,1,鞋子,200元,2双; 2, 袜子,20元,4双; 3,鞋子,200元,4双;4, 袜子,20元,4双;
我需要得到的结果是1,鞋子,200元,6双;2,袜子,20元,8双;希望高人指点一下
(由于只要求名称相等,所以我忽略了价格)
import java.util.ArrayList;
import java.util.List;public class Test {
public static void main(String[] args) {
List list = new ArrayList();// 这是原来的list
List result = new ArrayList();// 整理后的list
//设置原来的list
Bean item = new Bean();
item.setName("鞋子");
item.setAmount(2);
list.add(item); item = new Bean();
item.setName("袜子");
item.setAmount(3);
list.add(item); item = new Bean();
item.setName("鞋子");
item.setAmount(4);
list.add(item); item = new Bean();
item.setName("其他");
item.setAmount(10);
list.add(item); //设置整理后的list
for (int i = 0; i < list.size(); i++) {
Bean currentItemInList=(Bean)list.get(i);//原list中的当前物品
//根据名称判断物品是否已经在结果中
int j=0;
for(j=0;j<result.size();j++){
Bean currentItemInResult=(Bean)result.get(j);//结果中的当前物品
//如果已经存在于结果中则增加数量
if(currentItemInList.getName().equals(currentItemInResult.getName())){
//更新数量
currentItemInResult.setAmount(currentItemInResult.getAmount()+currentItemInList.getAmount());
break;
}
}
//j==result.size()表示没有执行break,即结果中不存在当前物品,所以需要将该物品加到结果中
if(j==result.size()){
result.add(currentItemInList);
}
}
//输出结果
for(int i=0;i<result.size();i++){
Bean currentItemInResult=(Bean)result.get(i);
System.out.println(currentItemInResult.getName()+","+currentItemInResult.getAmount());
}
}
}
Bean 如下
public class Bean {
private String name; private int amount; public int getAmount() {
return amount;
} public void setAmount(int amount) {
this.amount = amount;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}