3
respostas

O que é a Interface Consumer?

Olá amigos!

Vamos lá,

Java 8... o foreach recebendo um Consumer

class ConsumidorString implements Consumer<String> {
    @Override
    public void accept(String t) {
        System.out.println(t);
    }
}
List<String> palavras = new ArrayList<>();

        palavras.add("alura online");
        palavras.add("casa do código");
        palavras.add("caelum");

palavras.forEach(new ConsumidorString());
caelum
alura online
casa do código

Qual é a grande vantagem? Porque por quantidade de código para ser escrito, não ganha da solução pré Java 8 usando Comparators

Obrigado amigos.

3 respostas

Olá Israel, tudo bem?

O legal do Java 8 é conseguir escrever assim:

palavras.forEach(System.out::println);

Além de mais conciso para ler, o artefato gerado após compilação é menor.

Outra vantagem dos lambdas (e methods reference) é quando você os combina com a API de stream e outros recursos adicionados no Java 8, por exemplo:

private void pushToFront(AbstractInfo contactInfo) {
        registeredWindows.stream()
            .filter(window -> window.getWindowId() == contactInfo.getId())
            .findAny()
            .ifPresent(Window::pushToFront);
    }

Com Java 8 passar código como parâmetro de métodos passou a ser possível, recurso que já existia em outras linguagens a bastante tempo

Olá Otávio, na paz?

Nesse trecho aqui, quem tá implementando o Consumer?

palavras.forEach(System.out::println);

Valeu.

Oi Israel,

É o próprio código lambda que implementa automaticamente a interface funcional ao escrever um código tipo esse palavras.forEach(System.out::println);. Antes do Java 8 só podíamos usar uma anonymous inner class, agora com Java 8 a Lambda Expression implementa a functional interface (uma interface com um único método abstrato).