package javamoneyexamples.jsf.money.model; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import javax.money.CurrencyUnit; import javax.money.MonetaryAmount; import javax.money.Monetary; import org.javamoney.moneta.FastMoney; import org.javamoney.moneta.function.MonetaryFunctions; public class User implements Serializable { private static final CurrencyUnit CURRENCY = Monetary.getCurrency("USD"); private static final long serialVersionUID = -4619662846488953817L; private List<Product> products = new ArrayList<>(); public List<Product> getProducts() { return products; } public void addProduct(Product product) { Product copy = new Product(); copy.setMoney(product.getMoney()); copy.setName(product.getName()); products.add(copy); product.clear(); } public MonetaryAmount getSum() { return products.stream().map(Product::getMoney) .reduce(MonetaryFunctions.sum()) .orElse(FastMoney.of(0, CURRENCY)); } public MonetaryAmount getMin() { return products.stream().map(Product::getMoney) .reduce(MonetaryFunctions.min()) .orElse(FastMoney.of(0, CURRENCY)); } public MonetaryAmount getMax() { return products.stream().map(Product::getMoney) .reduce(MonetaryFunctions.max()) .orElse(FastMoney.of(0, CURRENCY)); } public int getCount() { return products.size(); } public MonetaryAmount getAverage() { return products.stream().map(Product::getMoney) .collect(MonetaryFunctions.summarizingMonetary(CURRENCY)) .getAverage(); } @Override public String toString() { return products.toString(); } }