/** * return the sum and convert all values to specific currency using the * provider, if necessary * @param provider the rate provider to be used, not null. * @param currency * currency * @return the list convert to specific currency unit */ public static BinaryOperator<MonetaryAmount> sum( ExchangeRateProvider provider, CurrencyUnit currency) { CurrencyConversion currencyConversion = provider .getCurrencyConversion(currency); return (m1, m2) -> currencyConversion.apply(m1).add( currencyConversion.apply(m2)); }
/** * comparator to sort the {@link MonetaryAmount} considering the * {@link ExchangeRate} * @param provider the rate provider to be used, not null. * @return the sort of {@link MonetaryAmount} using {@link ExchangeRate} */ public static Comparator<? super MonetaryAmount> sortValuable( ExchangeRateProvider provider) { return (m1, m2) -> { CurrencyConversion conversion = provider.getCurrencyConversion(m1 .getCurrency()); return m1.compareTo(conversion.apply(m2)); }; }
/** * return the minimum value, if the monetary amounts have different * currencies, will converter first using the given ExchangeRateProvider * @param provider * the ExchangeRateProvider to convert the currencies * @return the minimum value */ public static BinaryOperator<MonetaryAmount> min( ExchangeRateProvider provider) { return (m1, m2) -> { CurrencyConversion conversion = provider.getCurrencyConversion(m1 .getCurrency()); if (m1.isGreaterThan(conversion.apply(m2))) { return m2; } return m1; }; }
/** * return the maximum value, if the monetary amounts have different * currencies, will converter first using the given ExchangeRateProvider * @param provider * the ExchangeRateProvider to convert the currencies * @return the maximum value */ public static BinaryOperator<MonetaryAmount> max( ExchangeRateProvider provider) { return (m1, m2) -> { CurrencyConversion conversion = provider .getCurrencyConversion(m1.getCurrency()); if (m1.isGreaterThan(conversion.apply(m2))) { return m1; } return m2; }; }