Java 8 lambdas

10 respostas
J

Agendado para ser lançado em 2013, Java 8 incluirá suporte a idiomas para funções lambda. Embora a especificação ainda está em fluxo, lambdas já estão implementados no JDK 8 binários.

button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ui.dazzle(e.getModifiers()); } });

10 Respostas

E

Duran-san. não estou vendo lambdas (que exigem o novo operador “->” ) no exemplo que você deu. Acho que você queria dizer:

// Código em Java 1.2 e posterior
button.addActionListener(new ActionListener() {   
    public void actionPerformed(ActionEvent e) {   
        ui.dazzle(e.getModifiers());  
    }  
}); 
// Código equivalente em Java 8 (Lambdas) 
button.addActionListener ( e -> ui.dazzle (e.getModifiers()) );

Referência: http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-4.html

L

Esse operador “->” é chamado de operador seta ?
O que ele faz ?

J

entanglement:
Duran-san. não estou vendo lambdas (que exigem o novo operador “->” ) no exemplo que você deu. Acho que você queria dizer:

// Código em Java 1.2 e posterior
button.addActionListener(new ActionListener() {   
    public void actionPerformed(ActionEvent e) {   
        ui.dazzle(e.getModifiers());  
    }  
}); 
// Código equivalente em Java 8 (Lambdas) 
button.addActionListener ( e -> ui.dazzle (e.getModifiers()) );

Referência: http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-4.html

“Boa observação, a gramatica muda como uma expressão matemática que foi aprimorada”

E

Lucas_Soares:
Esse operador “->” é chamado de operador seta ?
O que ele faz ?

Não importa muito o nome do operador (devem dar um nome oficial para ele mais tarde - nesse documento ele é realmente chamado de “arrow”, mas acredito que eles acabem chamando de “lambda” ou outra coisa mais cerimoniosa).

O que ele faz é o seguinte: define um método que pode ser chamado sem você ter de criar uma classe anônima e outras coisas burocráticas (semelhante a um “anonymous delegate” do C# ou um “lambda” do C++11). Na verdade, ele até aceita algumas coisas mais complexas. Por exemplo, você não precisaria definir certas variáveis locais do método que incorpora esse código como “final” (o que é o caso em classes anônimas).

Dê uma olhada nos exemplos que estão disponíveis no documento que deixei apontado ( http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-4.html ).

L

Valeu.

J

Como provar Lambda ? button.addActionListener ( e -> ui.dazzle (e.getModifiers()) );

F

Ta ficando lindo…é só esperar o lançamento para começar a usar :wink:

F

Scala feelings :shock:

em scala se usa muito o =>

J
public interface NCopies{
    public <T extends Cloneable> List<T> getCopies(T seed, int num);
}

//This code will give a compilation error,
//As the lambda is meaningless without a context
(<T extends Cloneable> (seed, num) -> { 
                    List<T> list = new ArrayList<>(); 
                    for(int i=0; i<num; i++) 
                        list.add(seed.clone()); 
                    return list;
                }).getCopies(new CloneableClass(), 5);


However, the following would be perfectly alright, because there is an assignment context for the lambda. 

NCopies nCopies = <T extends Cloneable> (seed, num) -> { 
                    List<T> list = new ArrayList<>(); 
                    for(int i=0; i<num; i++) 
                        list.add(seed.clone()); 
                    return list;
                };
                
nCopies.getCopies(new CloneableClass(), 5);
E

Duran-san (se quiser seu nome em japonês, ele fica “ムルシオ・ヅラン”), poderia explicar o que você está citando do blog?

Pelo que imagino, ele está explicando que uma expressão lambda não existe sozinha mas depende de ser atribuída a uma variável ou então passada como parâmetro para algum método. É isso mesmo?

Criado 2 de julho de 2012
Ultima resposta 3 de jul. de 2012
Respostas 10
Participantes 5