我用list接收对象数组,对象里的元素包含有名称 价格,我怎么把名称相同的数据合并成一个并且不丢失名称不同的~
举个例子,1,鞋子,200元,2双; 2, 袜子,20元,4双; 3,鞋子,200元,4双;4, 袜子,20元,4双;
我需要得到的结果是1,鞋子,200元,6双;2,袜子,20元,8双;希望高人指点一下

解决方案 »

  1.   

    我要得到的是一个新的list集合用于前台显示~
      

  2.   

    这是和“购物车”相关的问题吧,解决办法如下
    (由于只要求名称相等,所以我忽略了价格)
    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;
    }
    }