Javase next
-
Upload
otavio-goncalves-de-santana -
Category
Technology
-
view
348 -
download
0
description
Transcript of Javase next
Java SE next
Otávio Santana @otaviojava
Bruno Souza@brjavaman
Empresas
AMDAzul Systems, Inc.
CanonicalGoogle
IBMIntel
OracleRedHat
SAP Software Company StratusTwitter
Lançamento do Java 8
● Lambda● Metaspace● Stream
Java 9
● Build: 25● https://jdk9.java.net/download/● Java 8 mais rápido
Java 9
Reflections wrappers Regex Security Core0
50
100
150
200
250
Java 8 - Processo
Java 9 - Processo
Java 8 - Memória
Java 9 - Memória
MetaSpace
● Muito Além do Heap● Matar o PermGem● Menor responsabilidade● Código mais limpo :)
Melhorias na GC
● Remoções de Combinações depreciadas● Remoção de String duplicadas● Segmentos de cache de Códigos - JIT
Removendo Strings duplicadas
● 25% do Heap são de Strings● 13.5% String duplicadas
Heap
Outros Objetos String
String dentro do Heap
String Strings duplicadas
JIT
● JVM internal (non-method) code● Profiled-code● Non-profiled code
GC mais inteligente
● Self Tunning● Alocação agressiva● JMM Update● Smart Compilation
Projeto Sumatra
● Uso de GPU
Jigsaw
● Atualizado e candidato: 08/08/2014● Código, JDK modularizado
Novidades
● Leitura e escrita no JSON● Genéricos para primitivos● builders para as Coleções● Literal para coleções
Novidades
● List<String> list = List.of(a, b, c);● Set<String> set = Set.of(d, e, f, g);● Map<String,String> map =
Map.of(k1, V1);● List<Integer> list = #[ 1, 2, 3 ];
Dinheiro: Como tratar?
● Double● Float● BigDecimal● String
Dinheiro: Como tratar?
Código espalhado
Não padronização
Comparação
Dinheiro: Como tratar?
Cria o tipo Money
Centraliza formatação
Comportamento
Fica mais OO
Dinheiro: Como tratar?
● Padrão de Moeda● Cotação● Formatação por país● ISO 4217
Dinheiro: Como tratar?
Negócio Dinheiro
● Banco os tipos/formatos● Coloca no dicionário● Arredondamento● Busca a cotação
MoneyApi
● Controle de Dinheiro● Formatar● Arredondar● Conversão
MoneyApi
CurrencyUnit euro = MonetaryCurrencies.getCurrency("EUR");
Money money = Money.of(120, euro);
NumberValue number = money.getNumber();
BigDecimal value = number.numberValue(BigDecimal.class);
MoneyApi
CurrencyUnit euro = MonetaryCurrencies.getCurrency(Locale.GERMAN);
Money m = Money.of(120, euro);
NumberValue number = m.getNumber();
BigDecimal value = number.numberValue(BigDecimal.class);
MoneyApi
Money noMoney = Money.of(0, euro);
Money m1 = Money.of(10, euro);
Money m2 = Money.of(30, euro);
Money m3 = Money.of(40, euro);
List<Money> moneys = Arrays.asList(m1, m2, m3);
Money sum = moneys.stream().reduce((ma, mb) -> ma.add(m2)).orElse(noMoney);
MoneyApi
Money sum = Stream.of(m1, m2, m3).reduce((ma, mb) -> ma.add(m2)).orElse(noMoney);
List<Money> euros = stream.filter(m -> m.getCurrency().equals(euro)).collect(Collectors.toList());
Map<CurrencyUnit, List<Money>> mapMoney = stream.collect(Collectors.groupingBy(Money::getCurrency));
MoneyApi
NumberValue sum = stream.map(m -> m.getNumber()).reduce((mA, mB) -> mA.add(mB)).orElseThrow(() -> new RuntimeException("É necessário ter dinheiro"));
Map<Boolean, List<Money>> positives = stream.collect(Collectors.partitioningBy(Money::isPositive));
MoneyApi
MonetaryAmountFormat format = MonetaryFormats.getAmountFormat(Locale.US);
String texto = format.format(m);//12,50 USD
format = MonetaryFormats.getAmountFormat(AmountFormatQueryBuilder.create(Locale.US).set(CurrencyStyle.SYMBOL).build());
String texto = format.format(m);//$123,456.56
MoneyApi
ExchangeRateProvider prov = MonetaryConversions.getExchangeRateProvider("ECB");
MonetaryAmount d2e = prov.getCurrencyConversion(euro).apply(mDollar);
MoneyApi
ExchangeRateProvider prov = MonetaryConversions.getExchangeRateProvider("IMF");MonetaryAmount d2e = prov.getCurrencyConversion(euro).apply(mDollar);
Unidade de Medida
● Semelhante ao Money● Padronizar unidades de Medidas● Formatar● Operações
Unidade de Medida
QuantityFactory<Mass> instance = QuantityFactory.getInstance(Mass.class);
Quantity<Mass> m = instance.create(10, KILOGRAM);
Unidade de Medida
QuantityFactory<Time> timeFactory = QuantityFactory.getInstance(Time.class);
Quantity<Time> m1 = timeFactory.create(40, MINUTE);
Quantity<Time> m2 = timeFactory.create(20, MINUTE);
Quantity<Time> h1 = m1.add(m2).to(HOUR);
Unidade de Medida
● Acceleration ● Length● Angle● Area● Mass● Power
● Energy● Speed● Force● Temperature● Time● Information● Volume
E muito mais! No total de 52 medidas
Obrigado
Otávio Santana @otaviojava
Bruno Souza@brjavaman