मुझे एक समस्या हो रही है क्योंकि मेरे पास उत्पादों की एक सूची है जिसमें कई प्रकार हैं, हालांकि, मैं सामान्य डेटा दिखाना चाहता हूं लेकिन इसे सूची में दोहराया गया था, अब मैं उन्हें केवल एक बार अस्तित्व में बना सकता हूं लेकिन समस्या यह है कि जब मैं चाहता हूं परिणाम सेट करने के लिए जब तत्व मेरे हैश में पहले से मौजूद था, यह सेट नहीं करता है, मुझे नहीं पता कि इसे जावा की उथली प्रतिलिपि के साथ करना है, मैंने क्लोन करने योग्य की कोशिश की लेकिन यह सफल नहीं हुआ।

  @RequiresApi(api = Build.VERSION_CODES.N)
  public List<ProductsAlmacenInfo> getProductsTotal() {
    HashMap<Long, ProductsAlmacenInfo> map = new HashMap<Long, ProductsAlmacenInfo>();
    for (ProductsAlmacenInfo x: products) {
      ProductsAlmacenInfo temp = x;
      if(map.containsKey(x.getId_product().toString()) && (x.getStock_type().contentEquals("VTA") ||
              x.getStock_type().contentEquals("VDO") || x.getStock_type().contentEquals("CHG"))) {
        temp.setQty(Math.abs(x.getQty()+1));
        map.replace(temp.getId_product(), temp);
      }
      else if (!map.containsKey(x.getId_product().toString())) {
        temp.setQty(Math.abs(x.getQty()));
        map.put(x.getId_product(), temp);
      }
    }
    List<ProductsAlmacenInfo> productsTemp = new ArrayList<ProductsAlmacenInfo>(map.values());
    if(productsTemp.isEmpty())  return products;
    return productsTemp;
  }[enter image description here][1]
-1
Erick Gutierrez 3 अप्रैल 2020, 01:20

1 उत्तर

सबसे बढ़िया उत्तर

नई प्रविष्टि डालने या मौजूदा प्रविष्टि के साथ संयोजन करने के लिए, merge() विधि का उपयोग करें:

HashMap<Long, ProductsAlmacenInfo> map = new HashMap<>();
for (ProductsAlmacenInfo x : products) {
    x.setQty(Math.abs(x.getQty())); // Why?

    map.merge(x.getId_product(), x, (a, b) -> {
        ProductsAlmacenInfo temp = b.clone(); // or use copy-constructor
                                              // or don't copy if not needed
        temp.setQty(a.getQty() + b.getQty());
        return temp;
    });
}

id_product और qty के अलावा अन्य सभी गुणों में उस id_product के लिए देखी गई अंतिम वस्तु के मान होंगे। यदि आप पहली बार देखी गई वस्तु से मान चाहते हैं, तो b के बजाय a क्लोन करें।

0
Andreas 2 अप्रैल 2020, 22:37