如何合并2个对象列表,但当重新填充2个对象时,将两者合并并更改数量?

时间:2019-10-03 15:16:26

标签: java

我有2个包含产品的订单清单。

我需要在合并列表时使用,如果它包含完全相同的产品,则更改其中一个的数量并删除另一个

我尝试了2个嵌套的fors,但似乎不起作用

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 个答案:

答案 0 :(得分:0)

假设您要将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}]

答案 1 :(得分:0)

这是使用嵌套器进行循环处理的一种方法,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);
    }
}

答案 2 :(得分:0)

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