删除重复的对象和求和字段值

j1n*_*nrg 1 java iteration loops arraylist

我试图从a中删除重复的对象ArrayList并对某个字段的值求和.例如:

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

{[Name: Ram, Quantity: 2], 
 [Name: Keyboard, Quantity: 3],
 [Name: Mouse, Quantity: 5],
 [Name: Keyboard, Quantity 5]} 
Run Code Online (Sandbox Code Playgroud)

我想写一个能找到重复数并将数量相加的函数.在这种情况下,键盘是重复的,所以最终ArrayList应该是这样的:

{[Name: Ram, Quantity: 2],
 [Name: Keyboard, Quantity: 8],
 [Name: Mouse, Quantity: 5]}.
Run Code Online (Sandbox Code Playgroud)

我已经尝试过它,它似乎有时会起作用,但有时会错过元素.

    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);
             }
         }
    }
Run Code Online (Sandbox Code Playgroud)

dur*_*597 5

  • j如果你删除了这个项目,你不想增加; 它会让你跳过紧接着的项目.
  • 你不想在第二个循环开始1,你想要启动它i+1,因为你不需要检查任何先前的元素.
  • 您的示例有一些语法错误,您更改myListlist并且您缺少一些括号和分号

试试这个:

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--;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

您还应该查看此链接,以帮助您解决以下问题: