SlideShare ist ein Scribd-Unternehmen logo
1 von 26
Downloaden Sie, um offline zu lesen
Bizus em Java
Bibliotecas que todos devem saber
Rodrigo Barbosa - Desenvolvedor líder no Guichê Virtual
Twitter: @digao_barbosa
Email: rodrigo@guichevirtual.com.br
Objetivo
● Público iniciante
● Aumentar produtividade
● Evitar duplicação de código
● Solução de Problemas comuns
Fonte
1. Lendo arquivo - commons-io
public class ReadFile {
public static void main(String [] a) throws IOException {
BufferedReader br=null;
try{
br= new BufferedReader(new FileReader("test.txt"));
String currentLine =null;
while((currentLine=br.readLine())!=null){
System.out.println(currentLine);
}
}catch (Exception e){
e.printStackTrace();
}finally {
if(br!=null)
br.close();
}

}
}
Lendo arquivo
commons-io para o resgate
public class ReadFileUtil {
public static void main(String[] a) {
try {
String s = FileUtils.readFileToString(new File("test.txt"));
System.out.println(s);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Outras utilidades
IOUtils.toString
public static void main(String[] a) throws IOException, URISyntaxException {
String text = IOUtils.toString(new FileInputStream("test.txt"));
String text2 = IOUtils.toString(new URI("http://www.guichevirtual.com.br"));
byte[] bytes = IOUtils.toByteArray(new FileInputStream("test.jug"));
}

FileUtils.write
public static void main(String[] a) throws IOException, URISyntaxException {
FileUtils.write(new File("test.txt"),"Bem vindos ao JUG Vale");
}
commons-io ... e ainda tem
●
●
●
●
●
●

FileUtils.copyDirectory
FileUtils.copyFile
IOUtils.copyLarge
IOUtils.readLines
FileUtils.checksum
FileUtils.contentEquals
2. Gerando tokens - apache-commons-lang
●

Usando API da JDK

public static String generateString(Random rng, String characters,
int length)
{
char[] text = new char[length];
for (int i = 0; i < length; i++)
{
text[i] = characters.charAt(rng.nextInt(characters.length()));
}
return new String(text);
}
De novo a apache nos ajuda
RandomStringUtils - apache commons lang
public static void main(String[] a) throws IOException, URISyntaxException {
String random = RandomStringUtils.random(10, true, true);
String random2 = RandomStringUtils.random(10, 'a', 'b', 'c', 'd', 'e');
}
3. Lidando com Strings - apachecommon-lang
Pra variar, apache commons lang
public static void main(String [] a){
String str="jug vale ";
StringUtils.isBlank(str);//false
StringUtils.abbreviate(str,6);//jug...
StringUtils.capitalize(str);//Jug vale
StringUtils.trim(" abc ");//"abc"
StringUtils.difference("abc","abcde");//"de"
StringUtils.getLevenshteinDistance("abc","abcde");//2
StringUtils.getLevenshteinDistance("abc","abc");//0
StringUtils.getLevenshteinDistance("frog","fog");//1
StringUtils.getLevenshteinDistance("frog","flog");//1
}
4. Trabalhando com Reflection bean-utils
● Lendo uma propriedade simples
String value = (String) PropertyUtils.getSimpleProperty(person, "name");

● Lendo uma propriedade aninhada
String java1 = (String) PropertyUtils.getNestedProperty(person,"skill.name");

● Lendo uma propriedade indexada
String telepone = (String) PropertyUtils.getIndexedProperty(person,"telephones",0);

● Todas as anteriores
String java2 = (String) PropertyUtils.getProperty(person,"skill.name");
bean-utils mais exemplos
● Escrevendo uma propriedade
PropertyUtils.setProperty(person,"skill.name","java");

● Copiando propriedades
PropertyUtils.copyProperties(copia,original);

● Mapa a partir de objeto
Map personMap = PropertyUtils.describe(person);// gera um mapa
5. Trabalhando com Datas
● java.util.Date é zoado
● java.util.Calendar é um pouco menos zoado
● Date é mutável, pode causar problemas
● Difícil de fazer operações
Trabalhando com Datas commons-lang
● DateUtils
○ isSameDay
○ addDays, addHours, addMinutes
○ parseDate

● DateFormatUtils
○ format
Trabalhando com Datas joda time
● Biblioteca completa de datas
● Será nativa do Java 8
● Novos conceitos: Data, horário, intervalo
○ LocalTime, LocalDate,LocalDateTime, Interval
6. Cache
Problema de performance - que tal um cache?
Eu quero também
● Para hibernate, pode usar ehcache
● Para Spring, alguns XMLs de configuração e
@Cacheable
● Para outros casos, Guava pode ajudar
Guava
●
●
●
●

Collections
Strings
Concorrencia
E cache
Guava - cache
● Simples de fazer
● Evita erros comuns
● Dá estatísticas do cache
● Diversas modalidades
Cache como um mapa
Construindo um
Cache
Cache<String,Person> cache = CacheBuilder.
newBuilder()
.maximumSize(1000)
.expireAfterWrite(5,TimeUnit.MINUTES)
.build();

Utilizando (como um
mapa)

cache.put("papito",findByName("supla"));
cache.put("raulzito",findByName("Raul Seixas"));
Person papito = cache.get("papito");
System.out.println(cache.stats().hitRate());
System.out.println(cache.stats().hitCount());
Cache com Loader
Construindo um Cache
Cache<String,Person> autoCache = CacheBuilder.newBuilder()
.maximumSize(1000)
.expireAfterWrite(5, TimeUnit.MINUTES)
.build(new CacheLoader<String, Person>() {
@Override
public Person load(String key) throws Exception {
return findByName(key);
}
});

Utilizando
Person papito = cache.get("papito");
System.out.println(cache.stats().hitRate());
7. Cansei de getters e setters
● Muito código sem importância
● Difícil achar o que realmente importa
● Dá trabalho, mesmo com generate do
eclipse
● Possível de erros
Cansei de getters e setters - Qual o melhor?
@Data
public class Person {
private Long id;
private String name;
private String address;
private String telephone;
private String email;
private Date birthDate;
}

public class Person {
private Long id;
private String name;
private String address;
private String telephone;
private String email;
private Date birthDate;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
Cansei de getters e setters - Lombok
●
●
●
●
●

@Data
Lombok
@Getter
@Setter
@ToString
@EqualsAndHashC
ode
Outros bizús
● imgscalr - Resize fácil (e rápido) de imagens
https://github.com/thebuzzmedia/imgscalr
● granule - minimização de css/js
https://code.google.com/p/granule/
● XStream - Serialização e deserialização de
XML fácil
http://xstream.codehaus.org/
Referências
● A fonte principal: http://pt.scribd.
com/doc/16065335/The-Common-JavaCookbook
● Guava https://code.google.com/p/guavalibraries/

Weitere ähnliche Inhalte

Was ist angesagt?

Apresentação de Ruby com Watir webdriver
Apresentação de Ruby com Watir webdriverApresentação de Ruby com Watir webdriver
Apresentação de Ruby com Watir webdriverRafael Lima
 
“Web Spiders” – Automação para Web Hacking
“Web Spiders” – Automação para Web Hacking“Web Spiders” – Automação para Web Hacking
“Web Spiders” – Automação para Web HackingConviso Application Security
 
Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails
Minicurso: Desenvolvimento na velocidade da luz com Ruby on RailsMinicurso: Desenvolvimento na velocidade da luz com Ruby on Rails
Minicurso: Desenvolvimento na velocidade da luz com Ruby on RailsLuiz Carvalho
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Luis Gustavo Almeida
 
A Classe StringBuilder em Java
A Classe StringBuilder em JavaA Classe StringBuilder em Java
A Classe StringBuilder em JavaDevmedia
 
Design de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentávelDesign de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentávelAndrews Medina
 
Spock Framework
Spock FrameworkSpock Framework
Spock FrameworkIsmael
 
Groovy na plataforma Java
Groovy na plataforma JavaGroovy na plataforma Java
Groovy na plataforma JavaJoão Lourenço
 
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...InterCon 2016 - Software as a service usando Go como principal linguagem: os ...
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...iMasters
 
Geolocalização em PHP - Google Places, Maps e Routes
Geolocalização em PHP - Google Places, Maps e RoutesGeolocalização em PHP - Google Places, Maps e Routes
Geolocalização em PHP - Google Places, Maps e RoutesLuis Gustavo Almeida
 
Zabbix Conference LatAm 2019 - Automação: Ganhando produtividade
Zabbix Conference LatAm 2019 - Automação: Ganhando produtividadeZabbix Conference LatAm 2019 - Automação: Ganhando produtividade
Zabbix Conference LatAm 2019 - Automação: Ganhando produtividadeIgor Nicoli
 
Spock Framework 2
Spock Framework 2Spock Framework 2
Spock Framework 2Ismael
 
Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Wilson Júnior
 

Was ist angesagt? (20)

programação c 5 aula
programação c 5 aulaprogramação c 5 aula
programação c 5 aula
 
programação c 10 aula
programação c 10 aulaprogramação c 10 aula
programação c 10 aula
 
Apresentação de Ruby com Watir webdriver
Apresentação de Ruby com Watir webdriverApresentação de Ruby com Watir webdriver
Apresentação de Ruby com Watir webdriver
 
Python e bancos NoSQL
Python e bancos NoSQLPython e bancos NoSQL
Python e bancos NoSQL
 
“Web Spiders” – Automação para Web Hacking
“Web Spiders” – Automação para Web Hacking“Web Spiders” – Automação para Web Hacking
“Web Spiders” – Automação para Web Hacking
 
Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails
Minicurso: Desenvolvimento na velocidade da luz com Ruby on RailsMinicurso: Desenvolvimento na velocidade da luz com Ruby on Rails
Minicurso: Desenvolvimento na velocidade da luz com Ruby on Rails
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017
 
Bsides4cooler
Bsides4coolerBsides4cooler
Bsides4cooler
 
Php curl - Coleta de dados na web
Php curl - Coleta de dados na webPhp curl - Coleta de dados na web
Php curl - Coleta de dados na web
 
A Classe StringBuilder em Java
A Classe StringBuilder em JavaA Classe StringBuilder em Java
A Classe StringBuilder em Java
 
String e IO
String e IOString e IO
String e IO
 
Design de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentávelDesign de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentável
 
Spock Framework
Spock FrameworkSpock Framework
Spock Framework
 
Groovy na plataforma Java
Groovy na plataforma JavaGroovy na plataforma Java
Groovy na plataforma Java
 
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...InterCon 2016 - Software as a service usando Go como principal linguagem: os ...
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...
 
Geolocalização em PHP - Google Places, Maps e Routes
Geolocalização em PHP - Google Places, Maps e RoutesGeolocalização em PHP - Google Places, Maps e Routes
Geolocalização em PHP - Google Places, Maps e Routes
 
Zabbix Conference LatAm 2019 - Automação: Ganhando produtividade
Zabbix Conference LatAm 2019 - Automação: Ganhando produtividadeZabbix Conference LatAm 2019 - Automação: Ganhando produtividade
Zabbix Conference LatAm 2019 - Automação: Ganhando produtividade
 
Spock Framework 2
Spock Framework 2Spock Framework 2
Spock Framework 2
 
Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)
 
Redis na Prática
Redis na PráticaRedis na Prática
Redis na Prática
 

Andere mochten auch

Ares1 x-nasa-r-091031204434-phpapp02
Ares1 x-nasa-r-091031204434-phpapp02Ares1 x-nasa-r-091031204434-phpapp02
Ares1 x-nasa-r-091031204434-phpapp02Vedran Ucman
 
La settimana dell'investitore 2009
La settimana dell'investitore 2009La settimana dell'investitore 2009
La settimana dell'investitore 2009Giuseppe Cioce
 
Sept. 29-30 - IPM for FOOD Plants Seminar - Sacramento. CA
Sept. 29-30  -  IPM for FOOD Plants Seminar - Sacramento. CA  Sept. 29-30  -  IPM for FOOD Plants Seminar - Sacramento. CA
Sept. 29-30 - IPM for FOOD Plants Seminar - Sacramento. CA Richard Kammerling
 
Mevlid kandili idris yavuzyiğit
Mevlid kandili idris yavuzyiğitMevlid kandili idris yavuzyiğit
Mevlid kandili idris yavuzyiğitSalım Selvi
 
Fek 00012189
Fek 00012189Fek 00012189
Fek 00012189wake23
 
Isra ve miraç mucizesi idris yavuzyiğit
Isra ve miraç mucizesi idris yavuzyiğitIsra ve miraç mucizesi idris yavuzyiğit
Isra ve miraç mucizesi idris yavuzyiğitSalım Selvi
 
Giulia's hub giuseppe cioce - la gestione finanziaria nelle pmi
Giulia's hub   giuseppe cioce - la gestione finanziaria nelle pmiGiulia's hub   giuseppe cioce - la gestione finanziaria nelle pmi
Giulia's hub giuseppe cioce - la gestione finanziaria nelle pmiGiuseppe Cioce
 
Bubbel van nul tot nu
 Bubbel van nul tot nu Bubbel van nul tot nu
Bubbel van nul tot nukoeiekop
 
Evlilik ve aile hukuku idris yavuzyiğit
Evlilik ve aile hukuku idris yavuzyiğitEvlilik ve aile hukuku idris yavuzyiğit
Evlilik ve aile hukuku idris yavuzyiğitSalım Selvi
 
Organ naklinin dini boyutu
Organ naklinin dini boyutuOrgan naklinin dini boyutu
Organ naklinin dini boyutuSalım Selvi
 
Regaip kandili yeni
Regaip kandili yeniRegaip kandili yeni
Regaip kandili yeniSalım Selvi
 
Come difendere i propri risparmi
Come difendere i propri risparmiCome difendere i propri risparmi
Come difendere i propri risparmiGiuseppe Cioce
 
L'abc della banca e il conto corrente
L'abc della banca e il conto correnteL'abc della banca e il conto corrente
L'abc della banca e il conto correnteGiuseppe Cioce
 

Andere mochten auch (17)

Ares1 x-nasa-r-091031204434-phpapp02
Ares1 x-nasa-r-091031204434-phpapp02Ares1 x-nasa-r-091031204434-phpapp02
Ares1 x-nasa-r-091031204434-phpapp02
 
La settimana dell'investitore 2009
La settimana dell'investitore 2009La settimana dell'investitore 2009
La settimana dell'investitore 2009
 
Sept. 29-30 - IPM for FOOD Plants Seminar - Sacramento. CA
Sept. 29-30  -  IPM for FOOD Plants Seminar - Sacramento. CA  Sept. 29-30  -  IPM for FOOD Plants Seminar - Sacramento. CA
Sept. 29-30 - IPM for FOOD Plants Seminar - Sacramento. CA
 
Mevlid kandili idris yavuzyiğit
Mevlid kandili idris yavuzyiğitMevlid kandili idris yavuzyiğit
Mevlid kandili idris yavuzyiğit
 
Fek 00012189
Fek 00012189Fek 00012189
Fek 00012189
 
Ficha
FichaFicha
Ficha
 
Aprendemos baloncesto
Aprendemos baloncestoAprendemos baloncesto
Aprendemos baloncesto
 
Isra ve miraç mucizesi idris yavuzyiğit
Isra ve miraç mucizesi idris yavuzyiğitIsra ve miraç mucizesi idris yavuzyiğit
Isra ve miraç mucizesi idris yavuzyiğit
 
Giulia's hub giuseppe cioce - la gestione finanziaria nelle pmi
Giulia's hub   giuseppe cioce - la gestione finanziaria nelle pmiGiulia's hub   giuseppe cioce - la gestione finanziaria nelle pmi
Giulia's hub giuseppe cioce - la gestione finanziaria nelle pmi
 
Bubbel van nul tot nu
 Bubbel van nul tot nu Bubbel van nul tot nu
Bubbel van nul tot nu
 
Evlilik ve aile hukuku idris yavuzyiğit
Evlilik ve aile hukuku idris yavuzyiğitEvlilik ve aile hukuku idris yavuzyiğit
Evlilik ve aile hukuku idris yavuzyiğit
 
Organ naklinin dini boyutu
Organ naklinin dini boyutuOrgan naklinin dini boyutu
Organ naklinin dini boyutu
 
Net etiquetas
Net etiquetasNet etiquetas
Net etiquetas
 
La teva Revista de Salut i Benestar
La teva Revista de Salut i BenestarLa teva Revista de Salut i Benestar
La teva Revista de Salut i Benestar
 
Regaip kandili yeni
Regaip kandili yeniRegaip kandili yeni
Regaip kandili yeni
 
Come difendere i propri risparmi
Come difendere i propri risparmiCome difendere i propri risparmi
Come difendere i propri risparmi
 
L'abc della banca e il conto corrente
L'abc della banca e il conto correnteL'abc della banca e il conto corrente
L'abc della banca e il conto corrente
 

Ähnlich wie Bizus Java bibliotecas

55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - BrazilStephen Chin
 
Kotlin: conhecendo features de uma linguagem moderna
Kotlin: conhecendo features de uma linguagem modernaKotlin: conhecendo features de uma linguagem moderna
Kotlin: conhecendo features de uma linguagem modernaFabrício Rissetto
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javJulio Viegas
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rustBruno Rocha
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinNelson Glauber Leal
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dadosHenrique Fernandes
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.pptEmerson Cardoso
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Fabrízio Mello
 
TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Jstdc-globalcode
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com javaMaurício Linhares
 
Passagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e OraclePassagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e OracleAndré Reis
 
[Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora![Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora!Rodrigo Stefani Domingues
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Alamo Saravali
 

Ähnlich wie Bizus Java bibliotecas (20)

55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil
 
Kotlin: conhecendo features de uma linguagem moderna
Kotlin: conhecendo features de uma linguagem modernaKotlin: conhecendo features de uma linguagem moderna
Kotlin: conhecendo features de uma linguagem moderna
 
Java 05
Java 05Java 05
Java 05
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
 
Floggy-GUJavaSC-2008-09-20
Floggy-GUJavaSC-2008-09-20Floggy-GUJavaSC-2008-09-20
Floggy-GUJavaSC-2008-09-20
 
Minicurso groovy grails
Minicurso groovy grailsMinicurso groovy grails
Minicurso groovy grails
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rust
 
Floggy-IIBoot-2008-09-25
Floggy-IIBoot-2008-09-25Floggy-IIBoot-2008-09-25
Floggy-IIBoot-2008-09-25
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com Kotlin
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dados
 
Doctrine2 Seminário PHP
Doctrine2 Seminário PHPDoctrine2 Seminário PHP
Doctrine2 Seminário PHP
 
Realtime com node.js e socket.io
Realtime com node.js e socket.ioRealtime com node.js e socket.io
Realtime com node.js e socket.io
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.ppt
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012
 
TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Js
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com java
 
Passagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e OraclePassagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e Oracle
 
[Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora![Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora!
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1
 

Bizus Java bibliotecas

  • 1. Bizus em Java Bibliotecas que todos devem saber Rodrigo Barbosa - Desenvolvedor líder no Guichê Virtual Twitter: @digao_barbosa Email: rodrigo@guichevirtual.com.br
  • 2. Objetivo ● Público iniciante ● Aumentar produtividade ● Evitar duplicação de código ● Solução de Problemas comuns
  • 4. 1. Lendo arquivo - commons-io public class ReadFile { public static void main(String [] a) throws IOException { BufferedReader br=null; try{ br= new BufferedReader(new FileReader("test.txt")); String currentLine =null; while((currentLine=br.readLine())!=null){ System.out.println(currentLine); } }catch (Exception e){ e.printStackTrace(); }finally { if(br!=null) br.close(); } } }
  • 5. Lendo arquivo commons-io para o resgate public class ReadFileUtil { public static void main(String[] a) { try { String s = FileUtils.readFileToString(new File("test.txt")); System.out.println(s); } catch (IOException e) { e.printStackTrace(); } } }
  • 6. Outras utilidades IOUtils.toString public static void main(String[] a) throws IOException, URISyntaxException { String text = IOUtils.toString(new FileInputStream("test.txt")); String text2 = IOUtils.toString(new URI("http://www.guichevirtual.com.br")); byte[] bytes = IOUtils.toByteArray(new FileInputStream("test.jug")); } FileUtils.write public static void main(String[] a) throws IOException, URISyntaxException { FileUtils.write(new File("test.txt"),"Bem vindos ao JUG Vale"); }
  • 7. commons-io ... e ainda tem ● ● ● ● ● ● FileUtils.copyDirectory FileUtils.copyFile IOUtils.copyLarge IOUtils.readLines FileUtils.checksum FileUtils.contentEquals
  • 8. 2. Gerando tokens - apache-commons-lang ● Usando API da JDK public static String generateString(Random rng, String characters, int length) { char[] text = new char[length]; for (int i = 0; i < length; i++) { text[i] = characters.charAt(rng.nextInt(characters.length())); } return new String(text); }
  • 9. De novo a apache nos ajuda RandomStringUtils - apache commons lang public static void main(String[] a) throws IOException, URISyntaxException { String random = RandomStringUtils.random(10, true, true); String random2 = RandomStringUtils.random(10, 'a', 'b', 'c', 'd', 'e'); }
  • 10. 3. Lidando com Strings - apachecommon-lang Pra variar, apache commons lang public static void main(String [] a){ String str="jug vale "; StringUtils.isBlank(str);//false StringUtils.abbreviate(str,6);//jug... StringUtils.capitalize(str);//Jug vale StringUtils.trim(" abc ");//"abc" StringUtils.difference("abc","abcde");//"de" StringUtils.getLevenshteinDistance("abc","abcde");//2 StringUtils.getLevenshteinDistance("abc","abc");//0 StringUtils.getLevenshteinDistance("frog","fog");//1 StringUtils.getLevenshteinDistance("frog","flog");//1 }
  • 11. 4. Trabalhando com Reflection bean-utils ● Lendo uma propriedade simples String value = (String) PropertyUtils.getSimpleProperty(person, "name"); ● Lendo uma propriedade aninhada String java1 = (String) PropertyUtils.getNestedProperty(person,"skill.name"); ● Lendo uma propriedade indexada String telepone = (String) PropertyUtils.getIndexedProperty(person,"telephones",0); ● Todas as anteriores String java2 = (String) PropertyUtils.getProperty(person,"skill.name");
  • 12. bean-utils mais exemplos ● Escrevendo uma propriedade PropertyUtils.setProperty(person,"skill.name","java"); ● Copiando propriedades PropertyUtils.copyProperties(copia,original); ● Mapa a partir de objeto Map personMap = PropertyUtils.describe(person);// gera um mapa
  • 13. 5. Trabalhando com Datas ● java.util.Date é zoado ● java.util.Calendar é um pouco menos zoado ● Date é mutável, pode causar problemas ● Difícil de fazer operações
  • 14. Trabalhando com Datas commons-lang ● DateUtils ○ isSameDay ○ addDays, addHours, addMinutes ○ parseDate ● DateFormatUtils ○ format
  • 15. Trabalhando com Datas joda time ● Biblioteca completa de datas ● Será nativa do Java 8 ● Novos conceitos: Data, horário, intervalo ○ LocalTime, LocalDate,LocalDateTime, Interval
  • 16. 6. Cache Problema de performance - que tal um cache?
  • 17. Eu quero também ● Para hibernate, pode usar ehcache ● Para Spring, alguns XMLs de configuração e @Cacheable ● Para outros casos, Guava pode ajudar
  • 19. Guava - cache ● Simples de fazer ● Evita erros comuns ● Dá estatísticas do cache ● Diversas modalidades
  • 20. Cache como um mapa Construindo um Cache Cache<String,Person> cache = CacheBuilder. newBuilder() .maximumSize(1000) .expireAfterWrite(5,TimeUnit.MINUTES) .build(); Utilizando (como um mapa) cache.put("papito",findByName("supla")); cache.put("raulzito",findByName("Raul Seixas")); Person papito = cache.get("papito"); System.out.println(cache.stats().hitRate()); System.out.println(cache.stats().hitCount());
  • 21. Cache com Loader Construindo um Cache Cache<String,Person> autoCache = CacheBuilder.newBuilder() .maximumSize(1000) .expireAfterWrite(5, TimeUnit.MINUTES) .build(new CacheLoader<String, Person>() { @Override public Person load(String key) throws Exception { return findByName(key); } }); Utilizando Person papito = cache.get("papito"); System.out.println(cache.stats().hitRate());
  • 22. 7. Cansei de getters e setters ● Muito código sem importância ● Difícil achar o que realmente importa ● Dá trabalho, mesmo com generate do eclipse ● Possível de erros
  • 23. Cansei de getters e setters - Qual o melhor? @Data public class Person { private Long id; private String name; private String address; private String telephone; private String email; private Date birthDate; } public class Person { private Long id; private String name; private String address; private String telephone; private String email; private Date birthDate; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getTelephone() { return telephone; } public void setTelephone(String telephone) { this.telephone = telephone; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email;
  • 24. Cansei de getters e setters - Lombok ● ● ● ● ● @Data Lombok @Getter @Setter @ToString @EqualsAndHashC ode
  • 25. Outros bizús ● imgscalr - Resize fácil (e rápido) de imagens https://github.com/thebuzzmedia/imgscalr ● granule - minimização de css/js https://code.google.com/p/granule/ ● XStream - Serialização e deserialização de XML fácil http://xstream.codehaus.org/
  • 26. Referências ● A fonte principal: http://pt.scribd. com/doc/16065335/The-Common-JavaCookbook ● Guava https://code.google.com/p/guavalibraries/