我有一个Products对象,其中包含ID,NAME,QUANTITY。
我有一个arraylist对象类型的产品,可能是在arraylist中同一产品出现了好几次但数量不同。
我想将所有相同ID的产品合并到一个产品中并累积数量。
例如,我有一个产品:
Id: 1
Name: Computer
Qty: 3
另一个:
Id: 1
Name: Computer
Qty: 7
我想汇总并删除arrayList中的重复项 结果:
Id: 1
Name: Computer
Qty: 10
这是我的代码,但它不能完全正常工作......
var j = 0
for (i in 0 until products.size) {
while (j < products.size) {
if (i != j) {
if (products[i].id == products[j].id) {
val totalQty = products[i].amountProduct + products[j].amountProduct
products[i].amountProduct = totalQty
products.remove(products[j])
j--
}
}
j++
}
try {
products[i].priceHT = products[i].price * products[i].amountProduct
} catch (e: RuntimeException) {
loge(e.message.toString())
}
}
答案 0 :(得分:1)
我会用Java回答,因为我不熟悉Kotlin。我看到你正在使用数组。我建议改为使用hashmap:
HashMap<Integer, Integer> productCount = new HashMap<Integer, Integer>();
for (i = 0; i < products.size; i++) {
int key = products[i].id;
int count = productCount.getOrDefault(key, 0);
productCount.put(key, count + products[i].quantity);
}
答案 1 :(得分:0)
您正在迭代它时从products
列表中删除元素。
考虑您是否有列表[a, b, c, d]
。您的索引i
为0
,您删除该元素。现在,列表变为[b,c,d]
,您将i
增加到1
。所以迭代的下一个元素是c
...你只是跳过 b
!
解决此问题的一种方法是将列表从最后一个元素迭代到第一个元素(从d
开始,然后返回到a
)。这样,当您删除d
时,不会跳过列表中的任何元素。
答案 2 :(得分:-1)
使用这段java代码。这将完成你的工作,但它在java。
public void removeDuplicates() {
for (int i = 0; i < products.size(); i++) {
for (int j = i + 1; j < products.size(); j++) {
if (products.get(i).getId().equals(products.get(j).getId())) {
int totalQty = products.get(i).getQty() + products.get(j).getQty();
products.get(i).setQty(totalQty);
products.remove(j);
j--;
}
}
}
}