Мне нужен один ArrayList<Coin>
выберите уникальные элементы и добавьте в другое ArrayList<LineItem>
. LineItem содержит монету и количество совпадений этой монеты в первом списке.Извлечь и изменить от одного ArrayList к другому
Мой код работает, но не правильно, и я не знаю, как обойти это ограничение?
Вот чек выход:
// 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 полдоллара и количество доллара список LineItem должен иметь только это два названия монеты и сопоставляет количество в список монет.)
Код:
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;
}
Он добавляет последний элемент to itemsList
coz Этот список не содержит элемент с количеством == 1. Но этот список имеет то же значение Coin
.
Как решить эту проблему?
Я не понимаю, в чем проблема. –
В 'while (! Done & i <= itemsList.size())' лучше использовать 'while ((! Done) && (i <= itemsList.size()))' –
@tieTYT список элементов LineItem содержит элементы с тем же именем монеты и разным количеством. Для этого элемента должна быть увеличена quntity. –