package org.javamoney.examples.console.functional; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.stream.Collectors; import javax.money.CurrencyUnit; import javax.money.MonetaryAmount; import javax.money.Monetary; import org.javamoney.moneta.Money; import org.javamoney.moneta.function.MonetaryFunctions; public class MonetaryFilterOperations { private static CurrencyUnit DOLLAR = Monetary.getCurrency(Locale.US); private static CurrencyUnit EURO = Monetary.getCurrency("EUR"); public static void main(String[] args) { MonetaryAmount money = Money.of(BigDecimal.valueOf(100D), DOLLAR); MonetaryAmount min = Money.of(BigDecimal.valueOf(6D), DOLLAR); MonetaryAmount max = Money.of(BigDecimal.valueOf(100D), DOLLAR); List<MonetaryAmount> moneys = getMoneys(); List<MonetaryAmount> justDollar = moneys.stream() .filter((MonetaryFunctions.isCurrency(DOLLAR))) .collect(Collectors.toList()); List<MonetaryAmount> notEuro = moneys.stream().filter((MonetaryFunctions.isCurrency(EURO))).collect(Collectors.toList()); // List<MonetaryAmount> euroOrDollar = moneys.stream().filter((MonetaryFunctions.containsCurrencies(EURO, DOLLAR))).collect(Collectors.toList()); List<MonetaryAmount> dollarGreaterOneHundred = moneys.stream().filter((MonetaryFunctions.isCurrency(DOLLAR).and(MonetaryFunctions.isGreaterThan(money)))).collect(Collectors.toList()); List<MonetaryAmount> dollarGreaterOneHundredDistinct = moneys.stream().distinct().filter((MonetaryFunctions.isCurrency(DOLLAR).and(MonetaryFunctions.isGreaterThan(money)))).collect(Collectors.toList()); List<MonetaryAmount> between = moneys.stream().filter((MonetaryFunctions.isCurrency(DOLLAR).and(MonetaryFunctions.isBetween(min, max)))).collect(Collectors.toList()); System.out.println(justDollar); System.out.println(notEuro); // System.out.println(euroOrDollar); System.out.println(dollarGreaterOneHundred); System.out.println(dollarGreaterOneHundredDistinct); System.out.println(between); } public static List<MonetaryAmount> getMoneys() { List<MonetaryAmount> moneys = new ArrayList<>(); moneys.add(Money.of(120, DOLLAR)); moneys.add(Money.of(50, DOLLAR)); moneys.add(Money.of(80, DOLLAR)); moneys.add(Money.of(90, DOLLAR)); moneys.add(Money.of(120, DOLLAR)); moneys.add(Money.of(120, EURO)); moneys.add(Money.of(50, EURO)); moneys.add(Money.of(80, EURO)); moneys.add(Money.of(90, EURO)); moneys.add(Money.of(120, EURO)); return moneys; } }