diff --git a/src/de/banananetwork/dsa/currencies/CurrencySet.java b/src/de/banananetwork/dsa/currencies/CurrencySet.java new file mode 100644 index 0000000..d7b6276 --- /dev/null +++ b/src/de/banananetwork/dsa/currencies/CurrencySet.java @@ -0,0 +1,40 @@ +package de.banananetwork.dsa.currencies; + +import java.util.*; + +public class CurrencySet { + + private final Currency[] currencies; + + private CurrencySet(Currency[] currencies) { + this.currencies = currencies; + } + + public Map transferToSet(int baseValue) { + final Map values = new EnumMap<>(Currency.class); + for (Currency currency : currencies) { + int value = currency.transferTo(baseValue); + values.put(currency, value); + baseValue -= currency.transferFrom(value); + } + if (baseValue != 0) + throw new RuntimeException(); // TODO Change to ValueNotRepresentableException + return values; + } + + public static class Builder { + + private List currencies = new LinkedList<>(); + + public Builder add(Currency currency) { + this.currencies.add(currency); + return this; + } + + public CurrencySet create() { + return new CurrencySet(currencies.stream().sorted(Comparator.comparing(Currency::getMultiplier).reversed()).toArray(Currency[]::new)); + } + + } + +}