删除ArrayList对象重复并获取值的总和

时间:2015-07-29 20:36:29

标签: java arraylist comparison

我有一个特定类型的对象列表。我需要删除重复对象键字段并总结它们的值。这有点难以解释,所以让我给你举个例子。

假设您有一个Item类:

public class Item {

protected String name;

protected int quantity;

public String getName() {
    return name;
   }

public void setName(String name) {
    this.name = name;
   }

public int getQuantity() {
    return quantity;
   }

public void setQuantity(intquantity) {
    this.quantity = quantity;
   }

}

你有一个项目列表:

List<Item> itemList = new ArrayList<Item>();

填充为:

 Item item1 = new Item();
 item1.setName("mice");
 item1.setQuantity(20);

 Item item2 = new Item();
 item2.setName("keyboards");
 item2.setQuantity(30);


 Item item3 = new Item();
 item3.setName("monitors");
 item3.setQuantity(4);

 Item item4 = new Item();
 item4.setName("mice");
 item4.setQuantity(15);

 Item item5 = new Item();
 item5.setName("cables");
 item5.setQuantity(50);


 itemList.add(0, item1);
 itemList.add(1, item2);
 itemList.add(2, item3);
 itemList.add(3, item4);
 itemList.add(4, item5);

我需要一个没有重复的输出ArrayList,并将数量值相加。

基本上,结果应该是元素的元素:鼠标,键盘,显示器,电缆,其中鼠标数量= 35(总和),键盘数量= 30,监视器= 4,电缆= 50。

2 个答案:

答案 0 :(得分:4)

如果您使用的是Java 8,则可以使用Collectors#groupingBy

itemList.stream().collect(
    Collectors.groupingBy(Item::getName, Collectors.summingInt(Item::getQuantity)));

答案 1 :(得分:2)

使用HashMap:

HashMap<String, Integer> myItemMap = new HashMap<String,Integer>();
if(myItemMap.containsKey(item)
{
  int currentQty = myItemMap.get(item);
  myItemMap.get(item).setQuantity(qty + currentQty )
}
else
{
  myItemMap.put(item, qty);
}