pabloxavier / fakebank

Estudos e treinamento de Spring e Serviços
0 stars 0 forks source link

Usando stream() para montar lista de models de retorno para GET de agências. #67

Closed pabloxavier closed 6 years ago

pabloxavier commented 6 years ago

Até aqui, havíamos criado uma classe AgenciaRepresentation que determina a "forma" de saída do JSON de uma agência.

Entretanto, há também um GET no Endpoint para retorno de uma lista de agências.

Nesta feature foi implementada uma alteração para usar a mesma Representação também na Lista de Agências.

Método principal:

    public static List<AgenciaRepresentation> from(List<Agencia> agencias){
        return
            agencias
                .stream()
                .map(item -> from(item))
                .collect(Collectors.toList());
    }

Neste método usamos o from() antes implementado para compor uma única agência.

Fazemos isto pelo map() do stream(), que é um método Lambda que permite mudar (re-mapear) a forma de uma collection.

Veja que agora, há dois métodos from(). Um que "formata" uma única agência, e outro que "formata" uma lista de agências.

    public static AgenciaRepresentation from(Agencia agencia){
        AgenciaRepresentation model = new AgenciaRepresentation();
        model.setCodigoDaAgencia(agencia.getCodigo());
        model.setNomeCompleto(agencia.getNome());
        model.setCnpj(agencia.getCnpj());
        return model;
    }

    public static List<AgenciaRepresentation> from(List<Agencia> agencias){
        return
            agencias
                .stream()
                        //Este from, é o from() logo acima
                .map(item -> from(item))
                .collect(Collectors.toList());
    }