java - 删除重复对象并求和字段值

标签 java loops arraylist iteration

我正在尝试从 ArrayList 中删除重复的对象并对某个字段的值求和。例如:

如果我有一个 ArrayList对象“硬件”:

{[Name: Ram, Quantity: 2], 
 [Name: Keyboard, Quantity: 3],
 [Name: Mouse, Quantity: 5],
 [Name: Keyboard, Quantity 5]} 

我想编写一个函数来查找重复项并对数量求和。在这种情况下,键盘是重复的,所以最后的 ArrayList应该看起来像:

{[Name: Ram, Quantity: 2],
 [Name: Keyboard, Quantity: 8],
 [Name: Mouse, Quantity: 5]}.

我已经尝试过,它似乎有时有效,但有时它会遗漏一些元素。

    List<Hardware> myList = new ArrayList<Hardware>();
    myList.add(new Hardware("Ram", 2);
    myList.add(new Hardware("Keyboard", 3);
    myList.add(new Hardware("Mouse", 5);
    myList.add(new Hardware("Keyboard", 5);

    for(int i = 0; i < list.size(); i++){
         Hardware current = list.get(i);
        for(int j = 1; j < list.size(); j++){
            Hardware compare = list.get(j);
            if(current.getName().equals(compare.getName)){
                 current.setQuantity(current.getQuantity()
                                   + compare.getQuantity())
                 list.remove(compare);
             }
         }
    }

最佳答案

  • 如果您删除了该项目,您不想增加 j;它会让您跳过紧随其后的项目。
  • 你不想在 1 开始第二个循环,你想在 i+1 开始,因为你不需要检查任何先验要素。
  • 您的示例有一些语法错误,您将 myList 更改为 list 并且您遗漏了一些括号和一个分号

试试这个:

List<Hardware> list = new ArrayList<Hardware>();
list.add(new Hardware("Ram", 2));
list.add(new Hardware("Keyboard", 3));
list.add(new Hardware("Mouse", 5));
list.add(new Hardware("Keyboard", 5));
list.add(new Hardware("Mouse", 1));

for (int i = 0; i < list.size(); i++) {
  Hardware current = list.get(i);
  for (int j = i + 1; j < list.size(); j++) {
    Hardware compare = list.get(j);
    if (current.getName().equals(compare.getName())) {
      current.setQuantity(current.getQuantity() + compare.getQuantity());
      list.remove(compare);
      j--;
    }
  }
}

您还应该查看此链接,以帮助您解决类似此类的 future 问题:

关于java - 删除重复对象并求和字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31990815/

相关文章:

java - 如何检查关联键的 ArrayList 是否包含感兴趣的字符串?

Java servlet : request. getParameter 和 request.setAttribute 以我不理解的方式连接

java - 在 Netbeans 中加载 DLL

java - 数据库数据过滤最佳实践

javascript - JS Loop 循环并导致浏览器崩溃?

C 简单数组代码不起作用

bash - 如何转义 bash 循环列表中的空格?

java - 如何访问属于 ArrayList 的对象的一部分?

java - 如何将 Google proto 时间戳转换为 Java LocalDate?

android - 如何使用两个 Firestore 集合制作一个 ArrayList?