关于向List集合中添加重复数据,合并的问题

One_Date 发布于 2016/09/13 15:28
阅读 1K+
收藏 0

有这样的一个需求:

  例:list集合中存放了几个菜,其中一道是土豆丝,(包括:名称,数量,单价),现在我在往数组内存一道菜,也是土豆丝,我怎样将这两个相同的土豆丝合并在一起,并且将数量变为2。到目前,没思路,谢谢了,看到的指点一下,谢谢了。

加载中
0
LarrySu
LarrySu
list中找到土豆丝,然后数量+1.
LarrySu
LarrySu
回复 @One_Date : 代码贴出来看看吧.
One_Date
One_Date
想到这样了,这是两条数据,怎样保存显示出的是一条0.0
0
Crissmagic
Crissmagic
if(list.contains(second)){
  list.get(X).getPotatoNum +1  
}

重写菜的equals 为名称比较

One_Date
One_Date
请问一下 second 是什么意思 0.0
0
IT小香猪
IT小香猪

假设土豆丝 id 是 afg123 ,你的数据是这样的 

id afg123 count 1

比较id 相同合并 最终

id afg123 count n (n>=1)


One_Date
One_Date
额,有点小明白,能在详细一下吗,谢谢了
0
s
shenwc931205

建议你先贴一下自己的代码哈,方便大家写代码回答。

如果你的一道菜是一个bean的话,把bean的equals()方法重写下,改为根据名称判断。然后在新加入元素时进行判断,equals就在把数量+1.

0
唱不完的离歌
唱不完的离歌

很多方法可以实现,

1、你在插入自己查询一下,土豆丝是否已经存在,如果存在,则将List中的土豆丝找到,将它的数量改为当前数量+想要插入的土豆丝的数量

2、自己实现一个list,在add方法中加判断,判断操作同一。

这两种都可以, 只是第一个简单,第二个更符合面向对象的逻辑。看你的选择了。

0
writeademo
writeademo
存在map里挺好
0
szwx855
szwx855
package com.suning.framework.uaa.test.a1;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * 菜单添加 <br>
 * 〈OCCHINA-question/2553420_2196472〉
 * @author 16080951(林健)【宝宝怕疼】
 * @Copyright (c) 2016 阿里巴巴支付宝 版权所有
 * @see [相关类/方法](可选)
 * @since [产品/模块版本] (可选)
 */
public class Test {

    private Map<String, Dish> currentDish = new HashMap<String, Dish>();

    class Dish {

        //名称
        private String name;

        //数值
        private int number;

        //价格
        private double cost;

        public Dish(String name, int number, double cost) {
            this.name = name;
            this.number = number;
            this.cost = cost;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getNumber() {
            return number;
        }

        public void setNumber(int number) {
            this.number = number;
        }

        public double getCost() {
            return cost;
        }

        public void setCost(double cost) {
            this.cost = cost;
        }
    }

    public Map<String,Dish> add(Dish dish){
        if(dish == null) return null;
        //获取当前菜菜在菜单中的对象。
        Dish currentDishObject = currentDish.get(dish.getName());
        //需要添加的菜菜不为空,且当前的菜单中这道菜不为空。
        if(currentDishObject != null){
            int _tmp = currentDishObject.getNumber();
            currentDishObject.setNumber(++_tmp);
        }else{
            //菜单中没这道菜,那就加呗。
            currentDishObject = dish;
        }
        currentDish.put(dish.getName(), currentDishObject);
        return currentDish;
    }


    public void beginAdd(){

        for(int i = 0;i < 5;i++){
            Dish dish1 = new Dish("土豆炒马云",1,15.00);
            add(dish1);
        }

        for(int i = 0;i < 2;i++){
            Dish dish1 = new Dish("土豆炒马化腾",1,15.00);
            add(dish1);
        }

        for(int i = 0;i < 15;i++){
            Dish dish1 = new Dish("西瓜炒张敬东",1,15.00);
            add(dish1);
        }
    }

    /**
     * 输出
     */
    public void print(){

        for(Map.Entry entry:currentDish.entrySet()){
            System.out.println("菜菜名:"+entry.getKey()+",当前数量为: "+((Dish)entry.getValue()).getNumber());
        }

    }
    public static void main(String[] args) {

        Test test1 = new Test();
        test1.beginAdd();
        test1.print();

    }


}


result:
菜菜名:土豆炒马化腾,当前数量为: 2
菜菜名:土豆炒马云,当前数量为: 5
菜菜名:西瓜炒张敬东,当前数量为: 15

Process finished with exit code 0

有问题在密我。



szwx855
szwx855
哦,我又仔细看了下你的问题,这边没有说需要动态哦。 另外我的例子只是演示,你可以把写死的数值改成动态的就可以啦。但原理都是通过这样添加的。
One_Date
One_Date
@szwx855 小哥,你的数量是好像是定好的哎0.0
返回顶部
顶部