Início > Programação > Java 8 Collections

Java 8 Collections

Os métodos padrão introduzidos no Java 8 permitiram que novas funcionalidades fossem agregada à API de Collections. Vamos ver um pouco do poder dessa API melhorada através de um exemplo. Suponha que você precisa descobrir que Pessoa em uma lista de pessoas tem a maior idade:

List<Pessoa> pessoas = new ArrayList<Pessoa>();
pessoas.add(new Pessoa("Mario", 83));
pessoas.add(new Pessoa("Rita", 70));
pessoas.add(new Pessoa("Maria", 50));
pessoas.add(new Pessoa("Ana", 48));
pessoas.add(new Pessoa("Tadeu", 43));

Sabendo que a lista de pessoas está em ordem decrescente de idade, podemos fazer simplesmente assim:

pessoas.get(0);

Ou, de forma mais elegante, podemos fazer um filtro:

pessoas.stream().filter(pessoa -> e.getIdade() == idade).findFirst().get();

Para complicar um pouco, vamos embaralhar a lista antes de fazer a pesquisa:

Collections.shuffle(pessoas);

Poderíamos organizar a lista com um Comparator de idade para garantir a ordem e depois utilizar um dos métodos anteriores para obter o primeiro item. Vamos modificar o problema para deixá-lo um pouco mais complexo.

Map<Sala, Integer> map = new HashMap<>();
pessoas.forEach(pessoa -> map.put(pessoa, idade));

Adicionei todas as pessoas em um Map e quero aquela que tem a maior idade. Supondo que não temos a lista de Pessoas original, você poderia sugerir que criássemos uma lista à partir do Map e a ordenássemos. É o que eu faria antigamente, mas no Java 8 dá pra fazer algo mais ineteressante com Stream:

Map.Entry<Pessoa, Integer> max = map.entrySet().stream()
.max(Map.Entry.comparingByValue(Integer::compareTo)).get();

System.out.println(max.getKey() + " tem " + max.getValue() + " anos");

Referências

1. [http://blog.caelum.com.br/o-minimo-que-voce-deve-saber-de-java-8/]
2. [https://zeroturnaround.com/rebellabs/java-8-explained-applying-lambdas-to-java-collections/]
3. [https://www.infoq.com/br/news/2013/10/tudo-sobre-java-8]

Anúncios
Categorias:Programação
  1. Nenhum comentário ainda.
  1. No trackbacks yet.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: