diff --git a/src/main/java/millions/model/Exchange.java b/src/main/java/millions/model/Exchange.java index fd4d7c1..c19ed0e 100644 --- a/src/main/java/millions/model/Exchange.java +++ b/src/main/java/millions/model/Exchange.java @@ -2,10 +2,13 @@ import java.math.BigDecimal; import java.math.RoundingMode; +import java.util.Collection; +import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; +import java.util.stream.Collectors; public class Exchange { private String name; @@ -67,6 +70,22 @@ public List findStocks(String searchTerm) { .toList(); } + public List getGainers(int limit) { + Collection stocksCollection = stocks.values(); + return stocksCollection.stream() + .sorted(Comparator.comparing(Stock::getLatestPriceChange).reversed()) + .limit(limit) + .collect(Collectors.toList()); + } + + public List getLosers(int limit) { + Collection stocksCollection = stocks.values(); + return stocksCollection.stream() + .sorted(Comparator.comparing(Stock::getLatestPriceChange)) + .limit(limit) + .collect(Collectors.toList()); + } + public void advance() { this.weekNumber++; for (Stock stock : this.stocks.values()) { diff --git a/src/main/java/millions/model/Player.java b/src/main/java/millions/model/Player.java index 9b8ce1f..9f3a682 100644 --- a/src/main/java/millions/model/Player.java +++ b/src/main/java/millions/model/Player.java @@ -9,7 +9,7 @@ public class Player { private BigDecimal money; private Portfolio portfolio; private TransactionArchive transactionArchive; - //temporary attribute until a better solution is found + // temporary attribute until a better solution is found public int weeksTraded; public Player(String name, BigDecimal startingMoney) { @@ -42,12 +42,6 @@ public void withdrawMoney(BigDecimal amount) { this.money = this.money.subtract(amount); } - public BigDecimal getNetWorth() { - BigDecimal netWorth = this.money; - netWorth = netWorth.add(this.portfolio.getNetWorth()); - return netWorth; - } - public String getStatus() { String status = "Novice"; BigDecimal netWorth = getNetWorth(); @@ -73,6 +67,10 @@ public Portfolio getPortfolio() { return this.portfolio; } + public BigDecimal getNetWorth() { + return this.money.add(this.portfolio.getNetWorth()); + } + public TransactionArchive getTransactionArchive() { return this.transactionArchive; } diff --git a/src/main/java/millions/model/Portfolio.java b/src/main/java/millions/model/Portfolio.java index f5f99d6..0c4af05 100644 --- a/src/main/java/millions/model/Portfolio.java +++ b/src/main/java/millions/model/Portfolio.java @@ -1,10 +1,9 @@ package millions.model; -import millions.model.calculators.SaleCalculator; - import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; +import millions.model.calculators.SaleCalculator; public class Portfolio { List shares; @@ -32,11 +31,12 @@ public List getShares(String symbol) { } public BigDecimal getNetWorth() { - BigDecimal netWorth = new BigDecimal(0); + BigDecimal total = BigDecimal.ZERO; for (Share share : shares) { - netWorth = netWorth.add(new SaleCalculator(share).calculateTotal()); + BigDecimal value = new SaleCalculator(share).calculateTotal(); + total = total.add(value); } - return netWorth; + return total; } public boolean contains(Share share) { diff --git a/src/main/java/millions/model/Stock.java b/src/main/java/millions/model/Stock.java index 2a67d74..65b70da 100644 --- a/src/main/java/millions/model/Stock.java +++ b/src/main/java/millions/model/Stock.java @@ -68,6 +68,10 @@ public BigDecimal getLowestPrice() { } public BigDecimal getLatestPriceChange() { + if (this.prices.size() < 2) { + return BigDecimal.ZERO; + } + BigDecimal currentPrice = this.prices.getLast(); BigDecimal lastPrice = this.prices.get(this.prices.size() - 2);