我需要一个ArrayList<Coin>
选择独特的元素并添加到另一个ArrayList<LineItem>
。LineItem 包含 Coin 和第一个列表中匹配此硬币的数量。
我的代码有效但不正确,我不知道如何规避这个限制?
这是检查输出:
// it's list of coin's element
LineItem [quantity=1, theCoin=Coin[value=0.5,name=half dollar]]
LineItem [quantity=1, theCoin=Coin[value=0.25,name=quantity dollar]]
LineItem [quantity=1, theCoin=Coin[value=0.25,name=quantity dollar]]
LineItem [quantity=1, theCoin=Coin[value=0.5,name=half dollar]]
LineItem [quantity=1, theCoin=Coin[value=0.5,name=half dollar]]
// list of LineItem's element
[
LineItem [quantity=2, theCoin=Coin[value=0.5,name=half dollar]],
LineItem [quantity=2, theCoin=Coin[value=0.25,name=quantity dollar]],
LineItem [quantity=1, theCoin=Coin[value=0.5,name=half dollar]]
]
元素列表LineItem
应仅包含具有唯一性的元素name
。如果名称在列表中,它应该只更新这个元素的数量。(我们只有 Coin half dollar 和数量 dollar 这两个元素。LineItem 列表必须只有这两个硬币名称,并且将数量匹配到 Coin 列表中)
代码:
private static ArrayList<LineItem> createItems(ArrayList<Coin> coins) {
ArrayList<LineItem> itemsList = new ArrayList<LineItem>();
for (Coin aCoin : coins) {
LineItem anItem = new LineItem(aCoin, 1);
System.out.println(anItem.toString()); // print every Coin element
if (!itemsList.contains(anItem)) {
itemsList.add(anItem);
} else {
int i = 0;
boolean done = false;
while (!done & i <= itemsList.size()) {
Coin currentCoin = itemsList.get(i).getCoin();
int currentQuantity = itemsList.get(i).getQuantity();
if (currentCoin.equals(aCoin)) {
itemsList.get(i).setQuantity(currentQuantity + 1);
done = true;
} else {
i++;
}
}
}
}
System.out.println("\n" + itemsList.toString()); // print final LineItem's list
return itemsList;
}
它将最后一个元素添加到此列表中,itemsList
因为此列表不包含数量 == 1 的元素。但是此列表具有相同的Coin
值。
如何解决这个麻烦?