qq_43458746 2019-11-22 16:54 采纳率: 50%
浏览 513
已采纳

一个关于List去重并叠加的问题

java代码如下:
List list = new ArrayList<>();
Goods goods=new Goods("番茄炒鸡蛋",1,5.0,5.0);
Goods goods2=new Goods("红烧肉",1,10,10));
Goods goods3=new Goods("水煮活鱼",1,12,12));
Goods goods4=new Goods("番茄炒鸡蛋",1,5.0,5.0);
list.add(goods);
list.add(goods2);
list.add(goods3);
list.add(goods4);
实体类依次是菜名,数量,单价,总价;现在想将list中菜名相同的数据进行合并,并且数量和总价进行叠加.
考虑运行效率高点,尽量不要双层循环,要怎么实现?

  • 写回答

2条回答 默认 最新

  • 打杂的程序员 2019-11-22 17:27
    关注
    List<Goods> table;
    Map<String,Goods> map = new LinkedHashMap();
                    for (Goods good : list) {
                        String key = good.get菜名;
                        table = map.get(key);
                        if (table != null) {
                            table.set数量(table.get数量+ good.get数量);
                            table.set单价(good.get单价);
                            table.set总价(table.get总价+good.get总价);
                            map.put(key, table);
                        } else {
                            map.put(key, good);
                        }
                    }
    
                                    for(Goods entry : map.values()){
                                     newList.add(entry);
                                    }
    
    

    用map 可以不用双循环,最后的newList是你最后返回的新的list。 全部手打,忘采纳

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?