diff --git a/millions/src/main/java/no/ntnu/gruppe53/Exchange.java b/millions/src/main/java/no/ntnu/gruppe53/Exchange.java index abbff58..0f729a5 100644 --- a/millions/src/main/java/no/ntnu/gruppe53/Exchange.java +++ b/millions/src/main/java/no/ntnu/gruppe53/Exchange.java @@ -143,13 +143,47 @@ public void advance() { } stock.addNewSalesPrice(changedPrice); + } + } + /** + * Lists the given amount of stocks sorted by highest increase in sales price since last week. + * @param entries amount of stocks to be shown in list + * @return a descending list of stocks with the highest price increase since last week + * @throws IllegalArgumentException if number of entries in list is negative + */ + public List getGainers(int entries) { + if (entries < 0) { + throw new IllegalArgumentException("Amount of entries in list cannot be negative."); + } + return stockMap.values().stream() + .sorted(Comparator.comparing(Stock::getLatestPriceChange).reversed()) + .filter(stock -> stock.getLatestPriceChange().compareTo(BigDecimal.ZERO) > 0) + .limit(entries) + .collect(Collectors.toList()); + } + /** + * Lists the given amount of stocks sorted by the stocks with the lowest price increase (or + * highest price decrease) + * @param entries amount of stocks to be shown in the list + * @return a descending list of stocks with the highest price decrease or + * lowest price increase + * @throws IllegalArgumentException if number of entries in list is negative + */ + public List getLosers(int entries) { + if (entries < 0) { + throw new IllegalArgumentException("Amount of entries in list cannot be negative."); } + return stockMap.values().stream() + .sorted(Comparator.comparing(Stock::getLatestPriceChange)) + .filter(stock -> stock.getLatestPriceChange().compareTo(BigDecimal.ZERO) < 0) + .limit(entries) + .collect(Collectors.toList()); }