Java 學習記錄75 — Sorted Collections — 2/4

張小雄
5 min readJul 15, 2021

Main.java 改

package Stock;public class Main {
private static StockList stockList = new StockList();
public static void main(String[] args) {
StockItem temp = new StockItem("bread", 0.86, 100);
stockList.addStock(temp);
temp = new StockItem("cake", 1.10, 7);
stockList.addStock(temp);
temp = new StockItem("car", 12.50, 2);
stockList.addStock(temp);
temp = new StockItem("chair", 62.0, 10);
stockList.addStock(temp);
temp = new StockItem("cup", 0.50, 200);
stockList.addStock(temp);
temp = new StockItem("door", 72.95, 4);
stockList.addStock(temp);
temp = new StockItem("juice", 2.50, 36);
stockList.addStock(temp);
temp = new StockItem("phone", 96.99, 35);
stockList.addStock(temp);
temp = new StockItem("towel", 2.40, 80);
stockList.addStock(temp);
temp = new StockItem("vase", 8.76, 40);
stockList.addStock(temp);
System.out.println(stockList); for (String s : stockList.Items().keySet()) {
System.out.println(s);
}
}
}

輸出結果:

Stock List

bread : $0.86 There are 100 items in stock. Total value of items: 86.00

cake : $1.1 There are 7 items in stock. Total value of items: 7.70

car : $12.5 There are 2 items in stock. Total value of items: 25.00

chair : $62.0 There are 10 items in stock. Total value of items: 620.00

cup : $0.5 There are 200 items in stock. Total value of items: 100.00

door : $72.95 There are 4 items in stock. Total value of items: 291.80

juice : $2.5 There are 36 items in stock. Total value of items: 90.00

phone : $96.99 There are 35 items in stock. Total value of items: 3394.65

towel : $2.4 There are 80 items in stock. Total value of items: 192.00

vase : $8.76 There are 40 items in stock. Total value of items: 350.40

Total stock value 5157.55

bread

cake

car

chair

cup

door

juice

phone

towel

vase

public Map<String, StockItem> Items() {
return Collections.unmodifiableMap(list);
}

這個呈現方式就跟著 list,看是用 HashMap<>()LinkedHashMap<>() 或其他

StockList.java 改

package Stock;import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class StockList {
private final Map<String, StockItem> list;
public StockList() {
this.list = new HashMap<>();
}
public int addStock(StockItem stockItem) {
if (stockItem != null) {
// check if already have stockItem, jf get null just pass stockItem of parameter
StockItem inStock = list.getOrDefault(stockItem.getName(), stockItem);
// if there are already stocks on this item, adjust the quantity
if (inStock != stockItem) {
stockItem.adjustStock(inStock.quantityInStock());
}
list.put(stockItem.getName(), stockItem);
return stockItem.quantityInStock();
}
return 0;
}
public int sellStock(String item, int quantity) {
StockItem inStock = list.getOrDefault(item, null);
if ((inStock != null) && (inStock.quantityInStock() >= quantity) && (quantity > 0)) {
inStock.adjustStock(-quantity);
return quantity;
}
return 0;
}
public StockItem getStockItem(String key) {
return list.get(key);
}
public Map<String, StockItem> Item() {
return Collections.unmodifiableMap(list);
}
@Override
public String toString() {
String s = "\nStock List\n";
double totalCost = 0.0;
for (Map.Entry<String, StockItem> item : list.entrySet()) {
StockItem stockItem = item.getValue();
double itemValue = stockItem.getPrice() * stockItem.quantityInStock(); s = s + stockItem + " There are " + stockItem.quantityInStock() + " items in stock. Total value of items: ";
s = s + String.format("%.2f", itemValue) + "\n";
totalCost += itemValue;
}
return s + " Total stock value " + String.format("%.2f", totalCost);
}
}

輸出結果:

Stock List

door : $72.95 There are 4 items in stock. Total value of items: 291.80

bread : $0.86 There are 100 items in stock. Total value of items: 86.00

car : $12.5 There are 2 items in stock. Total value of items: 25.00

phone : $96.99 There are 35 items in stock. Total value of items: 3394.65

towel : $2.4 There are 80 items in stock. Total value of items: 192.00

cake : $1.1 There are 7 items in stock. Total value of items: 7.70

chair : $62.0 There are 10 items in stock. Total value of items: 620.00

vase : $8.76 There are 40 items in stock. Total value of items: 350.40

juice : $2.5 There are 36 items in stock. Total value of items: 90.00

cup : $0.5 There are 200 items in stock. Total value of items: 100.00

Total stock value 5157.55

door

bread

car

phone

towel

cake

chair

vase

juice

cup

這邊改回 HashMap<>() 順序也跟著改變

改完記得改回去 LinkedHashMap<>()

StockItem.java 改

StockList.java 改

Basket.java 改

Main.java 改

package Stock;public class Main {
private static StockList stockList = new StockList();
public static void main(String[] args) {
StockItem temp = new StockItem("bread", 0.86, 100);
stockList.addStock(temp);
temp = new StockItem("bread", 0.2, 500);
stockList.addStock(temp);
// temp = new StockItem("cake", 1.10, 7);
// stockList.addStock(temp);
//
// temp = new StockItem("car", 12.50, 2);
// stockList.addStock(temp);
//
// temp = new StockItem("chair", 62.0, 10);
// stockList.addStock(temp);
//
// temp = new StockItem("cup", 0.50, 200);
// stockList.addStock(temp);
//
// temp = new StockItem("door", 72.95, 4);
// stockList.addStock(temp);
//
// temp = new StockItem("juice", 2.50, 36);
// stockList.addStock(temp);
//
// temp = new StockItem("phone", 96.99, 35);
// stockList.addStock(temp);
//
// temp = new StockItem("towel", 2.40, 80);
// stockList.addStock(temp);
//
// temp = new StockItem("vase", 8.76, 40);
// stockList.addStock(temp);
System.out.println(stockList);// for (String s : stockList.Items().keySet()) {
// System.out.println(s);
// }
}
}

輸出結果:

Stock List

bread : $0.2 There are 600 items in stock. Total value of items: 120.00

Total stock value 120.00

測試重複加入,有無正確顯示,商品要累加,總價格以新價格為主

Main.java 改

package Stock;public class Main {
private static StockList stockList = new StockList();
public static void main(String[] args) {
StockItem temp = new StockItem("bread", 0.86, 100);
stockList.addStock(temp);
temp = new StockItem("bread", 0.2, 500);
stockList.addStock(temp);
temp = new StockItem("cake", 1.10, 7);
stockList.addStock(temp);
temp = new StockItem("car", 12.50, 2);
stockList.addStock(temp);
temp = new StockItem("chair", 62.0, 10);
stockList.addStock(temp);
temp = new StockItem("cup", 0.50, 200);
stockList.addStock(temp);
temp = new StockItem("door", 72.95, 4);
stockList.addStock(temp);
temp = new StockItem("juice", 2.50, 36);
stockList.addStock(temp);
temp = new StockItem("phone", 96.99, 35);
stockList.addStock(temp);
temp = new StockItem("towel", 2.40, 80);
stockList.addStock(temp);
temp = new StockItem("vase", 8.76, 40);
stockList.addStock(temp);
// for (String s : stockList.Items().keySet()) {
// System.out.println(s);
// }
Basket zedBasket = new Basket("Zed");
sellItem(zedBasket, "car", 1);
System.out.println(zedBasket);
sellItem(zedBasket, "car", 1);
System.out.println(zedBasket);
sellItem(zedBasket, "car", 1);
sellItem(zedBasket, "something", 1);
System.out.println(zedBasket);
sellItem(zedBasket, "juice", 4);
sellItem(zedBasket, "cup", 12);
sellItem(zedBasket, "bread", 1);
System.out.println(zedBasket);
System.out.println(stockList);
}
public static int sellItem(Basket basket, String item, int quantity) {
// retrieve the item from stock list
StockItem stockItem = stockList.getStockItem(item);
if (stockItem == null) {
System.out.println("We don't sell " + item);
return 0;
}
if (stockList.sellStock(item, quantity) != 0) {
basket.addToBasket(stockItem, quantity);
return quantity;
}
return 0;
}
}

輸出結果:

Shopping basket Zed contains 1 items

car : $12.5. 1 purchased

Total cost 12.5

Shopping basket Zed contains 1 items

car : $12.5. 2 purchased

Total cost 25.0

We don’t sell something

Shopping basket Zed contains 1 items

car : $12.5. 2 purchased

Total cost 25.0

Shopping basket Zed contains 4 items

bread : $0.2. 1 purchased

car : $12.5. 2 purchased

juice : $2.5. 4 purchased

cup : $0.5. 12 purchased

Total cost 41.2

Stock List

bread : $0.2 There are 599 items in stock. Total value of items: 119.80

cake : $1.1 There are 7 items in stock. Total value of items: 7.70

car : $12.5 There are 0 items in stock. Total value of items: 0.00

chair : $62.0 There are 10 items in stock. Total value of items: 620.00

cup : $0.5 There are 188 items in stock. Total value of items: 94.00

door : $72.95 There are 4 items in stock. Total value of items: 291.80

juice : $2.5 There are 32 items in stock. Total value of items: 80.00

phone : $96.99 There are 35 items in stock. Total value of items: 3394.65

towel : $2.4 There are 80 items in stock. Total value of items: 192.00

vase : $8.76 There are 40 items in stock. Total value of items: 350.40

Total stock value 5150.35

買東西,看看庫存跟購物清單能否正確顯示

測試了購買超過庫存數量

還測試了購買不存在的商品

本篇使用代碼

--

--