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.