This post shows how you can sort a stream in reverse order and then select the top N elements.
This is quite common in financial systems.
For example, let's say that you have a list of currency exchange rate movements and you want to see the top 5 largest movements. You can do this using Java 8 Streams as shown below:
import static java.util.Comparator.*; import static java.util.stream.Collectors.*; // list of currency exchange rate percentage moves final List<Currency> currencies = Arrays.asList( new Currency("EUR/USD", 0.37), new Currency("USD/JPY", -0.21), new Currency("GBP/USD", 0.27), new Currency("AUD/USD", -0.08), new Currency("USD/CAD", 0.02), new Currency("USD/CHF", -0.46), new Currency("EUR/JPY", 0.16), new Currency("EUR/GBP", 0.13), new Currency("USD/HKD", 0.0), new Currency("EUR/CHF", 0.05), new Currency("USD/KRW", -0.71) ); currencies.stream() .sorted(comparing(Currency::getMove, comparing(Math::abs)).reversed()) .limit(5) .collect(toList());
The result is:
Currency [ccy=USD/KRW, move=-0.71] Currency [ccy=USD/CHF, move=-0.46] Currency [ccy=EUR/USD, move=0.37] Currency [ccy=GBP/USD, move=0.27] Currency [ccy=USD/JPY, move=-0.21]
The two argument Comparator.comparing
method easily allows us to compare currency moves on absolute value.
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.