dinheiro em java: joda-money, money api e além
TRANSCRIPT
![Page 2: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/2.jpg)
![Page 3: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/3.jpg)
![Page 4: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/4.jpg)
Double Float
BigDecimalIntegerLong
![Page 5: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/5.jpg)
Double e Float
double val = 1.03 - .42;
System.out.println(val); //0.6100000000000001
![Page 6: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/6.jpg)
Integer e Long
Economia de memória
Velocidade
Chance de dar problemas é alta
Não passar de 8 casas decimais
![Page 7: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/7.jpg)
public class Produto {
private String nome;
private int dinheiro;
//getter and setter
}
Produto banana = new Produto("banana", 1_00);
Produto macarrao = new Produto("macarrao", 1_00);
int total = banana.getDinheiro() + macarrao.getDinheiro();
![Page 8: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/8.jpg)
BigDecimal
● Maior Controle● Mais intuitivo
![Page 9: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/9.jpg)
BigDecimal bd1 = new BigDecimal(.01);
//0.01000000000000000020816681...
BigDecimal bd2 = new BigDecimal(.3);
//0.29999999999999998889776975...
BigDecimal total = bd1.add(bd2));
//30999999999999998910593...
![Page 10: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/10.jpg)
public class Produto {
private String nome;
private BigDecimal dinheiro;
//getter and setter
}
Produto caneta = new Produto("caneta", BigDecimal.valueOf(10.21));
Produto lapis = new Produto("lapis", BigDecimal.valueOf(12.21));
BigDecimal total = caneta.getDinheiro().add(lapis.getDinheiro());
![Page 11: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/11.jpg)
Mais desafios para o Dinheiro
● Internacionalização● Sair na tela
![Page 12: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/12.jpg)
public class Produto {
private String nome;
private String moeda;
private BigDecimal dinheiro;
//getter and setter
}
![Page 13: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/13.jpg)
public class Produto {
private String nome;
private Moeda moeda;
private BigDecimal dinheiro;
//getter and setter
}
enum Moeda {
REAL, DOLLAR, EURO;
}
![Page 14: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/14.jpg)
public class Produto {
private String nome;
private Currency moeda;
private BigDecimal dinheiro;
//getter and setter
}
Currency dollar = Currency.getInstance(Locale.US);
Currency real = Currency.getInstance("BRL");
![Page 15: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/15.jpg)
Produto celular = //instância;
Produto notebook = //instância;
BigDecimal valor = celular.getValor().add(notebook.getValor());
Produto celular = //instância;
Produto notebook = //instância; if(celular.getMoeda().equals(notebook.getMoeda())) {
BigDecimal valor = celular.getValor().add(notebook.getValor());
}
//exception
![Page 16: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/16.jpg)
public class ProdutoUtils {
public static BigDecimal somar(Produto pA, Produto pB) {
if(pA.getMoeda().equals(pB.getMoeda())) {
return pA.getValor().add(pB.getValor()); }
return null; }
}
BigDecimal valor = ProdutoUtils.somar(celular, notebook);
![Page 17: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/17.jpg)
public class MoneyUtils {
public static BigDecimal somar(Currency moedaA, BigDecimal valorA, Currency moedaB, BigDecimal valorB) {
//...
}
public class AssinaturaUtils {}
public class ServicoUtils {}
...
![Page 18: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/18.jpg)
![Page 19: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/19.jpg)
public interface Relatorio {
void printHeader();
void printBody();
void printFooter();
}
Relatorio relatorio = //;
relatorio.printHeader();
relatorio.printBody();
relatorio.printFooter();
![Page 20: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/20.jpg)
![Page 21: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/21.jpg)
public interface Relatorio {
void print();
}
Relatorio relatorio = //;
relatorio.print();
![Page 22: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/22.jpg)
![Page 23: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/23.jpg)
![Page 24: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/24.jpg)
public class Produto {
private String nome;
private Money money;
//getter and setter
}
public class Money extends BigDecimal {
private Currency money;
}
![Page 25: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/25.jpg)
Money valorBanana = new Money("12.00", dollar);
Money valorAbacaxi = new Money("12.00", dollar);
Produto banana = new Produto("banana", valorBanana);
Produto abacaxi = new Produto("abacaxi", valorAbacaxi);
Money money = banana.getMoney().add(valorBanana);
![Page 26: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/26.jpg)
public class Mar {
public Sal getSal(){ //...}
public boolean temPeixe() {
return true;
}
//...
}
public class Biscoito extends Mar {
}
![Page 27: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/27.jpg)
public class ClassPai {
public void bug(){
//...
}
//...
}
public class ClasseFilho extends ClassePai {
}
![Page 28: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/28.jpg)
public class Money {
private Currency currency;
private BigDecimal value;
}
Produto banana = new Produto("banana", valorBanana);
Produto abacaxi = new Produto("abacaxi", valorAbacaxi);
Money money = banana.getMoney().add(abacaxi.getMoney());
![Page 29: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/29.jpg)
![Page 30: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/30.jpg)
Joda-TimeJSR 310Joda-MoneyJSR 354
![Page 31: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/31.jpg)
CurrencyUnit usd = CurrencyUnit.of("USD");
Money m = Money.of(usd, 12.43d);
Money money = Money.parse("USD 23.87");
Money result = money.plus(m);
Joda-Money
![Page 32: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/32.jpg)
BigMoney bigMoney = money.toBigMoney();
bigMoney.isGreaterThan(b2);
bigMoney.isLessThan(b2);
bigMoney.isNegativeOrZero();
bigMoney.isPositiveOrZero();
bigMoney.plus(b2);
Joda-Money
![Page 33: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/33.jpg)
Money-API
![Page 34: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/34.jpg)
CurrencyUnit currency = MonetaryCurrencies.getCurrency(Locale.US);
MonetaryAmount money = Money.of(BigDecimal.valueOf(10), currency);
MonetaryAmount fastMoney = FastMoney.of(BigDecimal.valueOf(10), currency);
![Page 35: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/35.jpg)
CurrencyUnit real = MonetaryCurrencies.getCurrency("BRL");
MonetaryAmount m1 = Money.of(BigDecimal.valueOf(12D), real);
MonetaryAmount m2 = Money.of(BigDecimal.valueOf(10D), real);
MonetaryAmount m3 = m1.add(m2);
MonetaryAmount m4 = m1.subtract(m2);
MonetaryAmount m5 = m1.divide(2L);
![Page 36: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/36.jpg)
m1.isLessThan(m2);
m1.isLessThanOrEqualTo(m2);
m1.isGreaterThanOrEqualTo(m2);
m1.isNegative();
m1.isPositive();
m1.isZero();
![Page 37: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/37.jpg)
CurrencyUnit dollar = MonetaryCurrencies.getCurrency(Locale.US);
MonetaryAmount m = Money.of(120, dollar);
NumberValue number = m.getNumber();
BigDecimal value = number.numberValue(BigDecimal.class);
![Page 38: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/38.jpg)
MonetaryAmountFormat format = MonetaryFormats.getAmountFormat(Locale.US);
String texto = format.format(m);//12,50 USD
MonetaryAmount money = Money.parse("EUR 25.25");
MonetaryAmount m2 = Money.parse(texto, format);
![Page 39: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/39.jpg)
MonetaryAmount noMoney = Money.of(0, euro);
MonetaryAmount m1 = Money.of(10, euro);
MonetaryAmount m2 = Money.of(30, euro);
MonetaryAmount m3 = Money.of(40, euro);
List<MonetaryAmount> moneys = Arrays.asList(m1, m2, m3);
MonetaryAmount sum = moneys.stream().reduce(MonetaryFunctions.sum()).orElse(noMoney);
![Page 40: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/40.jpg)
List<MonetaryAmount> justDollar = moneys.stream().filter((MonetaryFunctions.isCurrency(DOLLAR)))
.collect(Collectors.toList());
List<MonetaryAmount> notEuro = moneys.stream().filter((MonetaryFunctions.isNotCurrency(EURO))).collect(Collectors.toList());
![Page 41: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/41.jpg)
MonetaryFunctions.isCurrency(DOLLAR).and(MonetaryFunctions.isBetween(min, max)));
MonetaryFunctions.containsCurrencies(EURO, DOLLAR)).or(MonetaryFunctions.isGreaterThan(money)));
![Page 42: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/42.jpg)
List<MonetaryAmount> orderCurrencyValue = moneys.stream().sorted(MonetaryFunctions.sortCurrencyUnit().thenComparing(MonetaryFunctions.sortNumber())).collect(Collectors.toList());
List<MonetaryAmount> orderHighValue = moneys.stream().sorted(MonetaryFunctions.sortCurrencyUnit().thenComparing(MonetaryFunctions.sortCurrencyUnitDesc()))
.collect(Collectors.toList());
![Page 43: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/43.jpg)
Map<CurrencyUnit, List<MonetaryAmount>> groupBy = moneys.stream().collect(MonetaryFunctions.groupByCurrencyUnit());
List<MonetaryAmount> notEuro = moneys.stream().filter((MonetaryFunctions.isNotCurrency(EURO))).collect(Collectors.toList());
![Page 44: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/44.jpg)
MonetarySummaryStatistics summary = moneys.stream().collect(MonetaryFunctions.summarizingMonetary(DOLLAR));
GroupMonetarySummaryStatistics groupSummary = moneys.stream().collect(MonetaryFunctions.groupBySummarizingMonetary());
![Page 45: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/45.jpg)
MonetarySummaryStatistics summary = ...
MonetaryAmount min = summary.getMin();MonetaryAmount max = summary.getMax();MonetaryAmount avarage = summary.getAverage();Long count = summary.getCount();
![Page 46: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/46.jpg)
MoneyApi
GroupMonetarySummaryStatistics groupSummary =...
Map<CurrencyUnit, MonetarySummaryStatistics> map = groupSummary.get();MonetarySummaryStatistics summaryDollar = map.get(DOLLAR);
![Page 47: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/47.jpg)
CurrencyUnit real = MonetaryCurrencies.getCurrency("BRL");
CurrencyUnit dollar = MonetaryCurrencies.getCurrency(Locale.US);
MonetaryAmount m1 = Money.of(BigDecimal.valueOf(12D), real);
MonetaryAmount m2 = Money.of(BigDecimal.valueOf(10D), dollar);
m1.add(m2);
javax.money.MonetaryException: Currency mismatch: BRL/USD
![Page 48: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/48.jpg)
ExchangeRateProvider prov = MonetaryConversions
.getExchangeRateProvider("ECB");
MonetaryAmount d2e = prov.getCurrencyConversion(euro).apply(mDollar);
![Page 49: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/49.jpg)
ExchangeRateProvider prov = MonetaryConversions.getExchangeRateProvider("IMF");MonetaryAmount d2e = prov.getCurrencyConversion(euro).apply(mDollar);
![Page 50: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/50.jpg)
ExchangeRateProvider provider = MonetaryConversions.getExchangeRateProvider(ExchangeRateType.ECB);
ExchangeRateType.ECBExchangeRateType.IMFExchangeRateType.ECB_HIST90ExchangeRateType.ECB_HISTExchangeRateType.IDENTITY
![Page 51: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/51.jpg)
ExchangeRateProvider provider = MonetaryConversions.getExchangeRateProvider(ExchangeRateType.ECB);
moneys.stream().sorted(MonetaryFunctions.sortValuable(provider));
moneys.stream().sorted(MonetaryFunctions.sortValuableDesc(provider));
![Page 52: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/52.jpg)
List<MonetaryAmount> orderCurrencyValue = moneys.stream().sorted(MonetaryFunctions.sortValuable(provider).collect(Collectors.toList());
● 9 BRL● 8 USD● 7 EUR
● Motivo: ● 1 USD = 2.4203 BRL● 1 EUR = 4.4203 BRL● 1 USD = 0.79 EUR
● 7 EUR ● 9 BRL● 8 USD
![Page 53: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/53.jpg)
MonetarySummaryStatistics summary = moneys.stream().collect(MonetaryFunctions.summarizingMonetary(real, provider));
summary.getCount();summary.getMax();summary.getMin();summary.getAverage();
![Page 54: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/54.jpg)
moneys.stream().reduce(MonetaryFunctions.sum(provider, dollar));
moneys.stream().reduce(MonetaryFunctions.min(provider));
moneys.stream().reduce(MonetaryFunctions.max(provider));
![Page 55: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/55.jpg)
![Page 56: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/56.jpg)
![Page 57: Dinheiro em Java: Joda-Money, Money API e além](https://reader031.vdocuments.net/reader031/viewer/2022012402/55a5df901a28ab83558b4810/html5/thumbnails/57.jpg)