top of page

Baixe grátis nossos e-books

Explore o mundo da Engenharia de Software e Data de forma mais eficiente e acessível com nossos eBooks!

  • Foto do escritorJP

Java: Streams API - Sorted

Desde o Java 8 lançado em 2014 foram adicionados dezenas de novas funcionalidades dentre melhorias na JVM e funções para facilitar a vida do desenvolvedor, pois ele merece. Dentre estas features, estão as Expression Lambda (EL) que foi o ponta pé inicial para a entrada do Java no mundo da programação funcional, melhoria na API de Data e a não necessidade de criar implementações de Interfaces já existentes com a utilização de Default methods.


E a outra novidade é a API de Streams, o foco desse post. A Stream API é uma nova abordagem para se trabalhar com Collections deixando o código menos verboso e mais inteligente.


A Stream API trabalha com o processamento de dados sob demanda e fornece dezenas de funcionalidades para manipular Collections diminuindo o código e simplificando o desenvolvimento em uma espécie de pipeline que será explicado mais a frente.


Vamos criar um Classe representando a entidade Cidade no qual terá como atributos: nome, estado e população. E por fim um método chamado listaCidades que carrega uma lista de objetos do tipo Cidade.


public class Cidade {

    String nome;
    String estado;
    long populacao;

    public Cidade(){}
    
    public Cidade(String nome, String estado,
                  long populacao){
        this.nome = nome;
        this.estado = estado;
        this.populacao = populacao;
    }

    public List<Cidade> listaCidades(){
        List<Cidade> cidades = new ArrayList<Cidade>();
        cidades.add(new Cidade("Hollywood", "CA", 30L));
        cidades.add(new Cidade("Venice", "CA", 10L));
        cidades.add(new Cidade("Houston", "TX", 14L));
        cidades.add(new Cidade("New York", "NY", 21L));
        cidades.add(new Cidade("Albany", "NY", 11L));
        cidades.add(new Cidade("Rio de Janeiro", "RJ", 14L));
        cidades.add(new Cidade("São Paulo", "SP", 90L));
        return cidades;
    }
    
    @Override
    public String toString() {
    return "Cidade: " + nome +
            " /Estado: " + estado +
            " /População: " + populacao;
    }
}

Sorted


O método Sorted() possibilita a ordenação de uma Collection através da passagem do campo em que deseja ser ordenado.

cidadesComPopulacaoMaiorQue20 =
        cidade.listaCidades()
                .stream()
                .sorted(Comparator.comparing(c -> c.nome))
                .collect(Collectors.toList());

cidadesComPopulacaoMaiorQue20.forEach(
        c -> System.out.println(c)
);

No método sorted() é utilizado o método comparing da interface Comparator que aceita uma função como parâmetro e em seguida extrai retornando uma chave de ordenação. No exemplo anterior a ordenação é feita pelo campo Cidade.nome em ordem alfabética.


Saída:


Cidade: Albany /Estado: NY /População: 11

Cidade: Hollywood /Estado: CA /População: 30

Cidade: Houston /Estado: TX /População: 14

Cidade: New York /Estado: NY /População: 21

Cidade: Rio de Janeiro /Estado: RJ /População: 14

Cidade: São Paulo /Estado: SP /População: 90

Cidade: Venice /Estado: CA /População: 10

 

Como funciona a pipeline?


Seguindo o exemplo anterior, a pipeline é um processo sequencial que se diferencia entre operações intermediárias e finais. No exemplo, a Stream é invocada a partir de uma fonte de dados (lista de objetos do tipo Cidade) que trabalha sob demanda, o método sorted é uma operação intermediária, ou seja, ela processa os dados até que o método collect é invocado, originando uma operação final.



 

Material de estudo


Se quer aprender mais sobre o assunto e alcançar um alto nível de conhecimento, recomendo fortemente a leitura do(s) seguinte(s) livro(s):


Use a cabeça: Java é um clássico onde qualquer iniciante no assunto deve ler e estudar. Neste livro você aprenderá sobre os principais pilares de Java como, orientação a objetos, criação de classes, interfaces e seu funcionamento, controlar exceções, objetos genéricos e muito mais. Se quer entrar de cabeça neste mundo, é uma excelente opção!













Padrões de Projeto é um livro no qual recomendamos após alcançar uma certa maturidade em programação em geral. Escrito por grandes nomes do assunto e traduzido para o português, Padrões de Projeto ou Design patterns como também são conhecidos, são padrões e estratégias que te ajudará a resolver diferentes desafios arquiteturais, aplicando soluções de forma elegante.

São estratégias em que desenvolvedores de todo o mundo tem adotado em seus projetos. Imagina se você precisa atuar em um projeto internacional, caso este projetos tem adotado estratégias de Padrões de projeto, você não terá nenhuma grande dificuldade em entender a dinâmica e a arquitetura do código ou caso contrário, você mesmo poderá aplicar os conhecimentos adquiridos através deste livro.

O mais interessante que Padrões de Projeto independem de linguagem de programação, é possível aplicar em qualquer outra linguagem, ou seja, é um conteúdo 100% reutilizável.













Java Efetivo escrito por Joshua Bloch e traduzido para o português, é um livro excelente para aqueles que possuem um pouco mais de experiência com Java mas que precisam aprofundar em detalhes mais específicos da linguagem como, quando e como usar específicos Padrões de Projeto ou Design Patterns, utilização de Lambdas e Streams, concorrências e serializações. Para aqueles que possuem mais de experiência, é um excelente material de consulta.














E aí, curtiu? Até mais!

Posts recentes

Ver tudo
bottom of page