为了账号安全,请及时绑定邮箱和手机立即绑定

如何合并 2 个对象列表,但是当有 2 个对象重复时,它会将两者合并并更改数量?

如何合并 2 个对象列表,但是当有 2 个对象重复时,它会将两者合并并更改数量?

白板的微信 2023-09-20 16:35:14
我有 2 个包含产品的订单清单。我需要当你合并列表时,如果它包含完全相同的产品,请更改一个的数量并删除另一个我尝试了 2 个嵌套的 for,但似乎不起作用for (ProductoSolicitado p: lista1) {    for (int i = 0; i < lista1.size(); i++) {        if (p.getIdProducto().equals(lista1.get(i).getIdProducto())) {            p.setCantidad(p.getCantidad() + lista1.get(i).getCantidad());            lista1.get(i).setIdProducto("0");            lista2.add(p);            lista2.add(lista1.get(i));        }    }}for (ProductoSolicitado p: lista2) {    if (!p.getIdProducto().equals("0")) {        lista3.add(p);    }}
查看完整描述

3 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

假设您想要将 lista2 产品合并到 lista1 并且您有 3 个产品。


P1 - P3 在 lista1 中,P2 - P3 在 lista2 中


List<Product> lista1 = new ArrayList<>();

List<Product> lista2 = new ArrayList<>();

Product p1 = new Product();

p1.setCantidad(1);

p1.setIdProducto("1");

Product p2 = new Product();

p2.setCantidad(1);

p2.setIdProducto("2");

Product p3 = new Product();

p3.setCantidad(1);

p3.setIdProducto("3");


lista1.add(p1);

lista1.add(p3);

lista2.add(p2);

lista2.add(p3);    

//Loop lista1

for (Product lista1Product:lista1){

  //Use iterator to easily remove items from list 2

  Iterator<Product> i = lista2.iterator();

  while (i.hasNext()){

    Product lista2Product = i.next();

    if (lista1Product.getIdProducto()!=null &&

       lista1Product.getIdProducto().equals(lista2Product.getIdProducto())){

       //Found same productID. Increase the quantity

       lista1Product.setCantidad(lista1Product.getCantidad()+lista2Product.getCantidad());

       //Remove from lista2

       i.remove();

     }

   }

 }

System.out.println("Lista1: " + lista1.toString());

System.out.println("Lista2: " + lista2.toString());

输出是:


Lista1: [Product{IdProducto='1', cantidad=1}, Product{IdProducto='3', cantidad=2}]

Lista2: [Product{IdProducto='2', cantidad=1}]


查看完整回答
反对 回复 2023-09-20
?
冉冉说

TA贡献1877条经验 获得超1个赞

public static void main(String[] args) {

    // TODO Auto-generated method stub


    List<Product> l1 = new ArrayList<Product>();

    l1.add(new Product("PEN", 10));

    l1.add(new Product("BALL", 505));

    l1.add(new Product("CAP", 88));

    List<Product> l2 = new ArrayList<Product>();

    l2.add(new Product("PEN", 9));

    l2.add(new Product("Apple", 10));


    int count =0;

    boolean found = false;

    for(int i=0;i<l2.size();i++) { // looping the second list

        count = 0;

        found = false;

        for(int j=0; j<l1.size(); j++) { // looping the first list and checking whether the 

            //same product code exist in the second list or not

            // if found the same product code then getting the quantity and adding the quantity

            // updating the new quantity value into first list

            //updating the flage value

            if(l1.get(j).getProductCode().equalsIgnoreCase(l2.get(i).getProductCode())) {

                count = l1.get(j).getQuantity() +l2.get(i).getQuantity();

                l1.get(j).setQuantity(count);

                found = true;

                break;

            }

        }

        if(!found) // if the product from second list not found in first list then this flag value  false.

            // then adding this product into first list

        {

            l1.add(l2.get(i));

        }


    }

    for(Product obj :l1) {

        System.out.println(obj.getProductCode() +" :" +obj.getQuantity());

    }


}

输出:笔:19 球:505 帽:88 苹果:10


查看完整回答
反对 回复 2023-09-20
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

这是一种使用nester for循环来处理它的方法,lista2将是组合列表,lista1将从其中删除重复项(id设置为0)。


for (ProductoSolicitado product1: lista1) {

    boolean found = false;

    for (ProductoSolicitado product2: lista2) {

        if (product1.getIdProducto().equals(product2.getIdProducto())) {

            product2.setCantidad(product1.getCantidad() + product2.getCantidad());

            product1.setIdProducto("0");

            found = true;

            break;

        }

    }

    if(!found){

        lista2.add(product1);

    }

}


查看完整回答
反对 回复 2023-09-20
  • 3 回答
  • 0 关注
  • 94 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信