Eu vi um lambda definido como uma função anônima e como uma referência a uma função. Javascript oferece suporte a:
setTimeout(function(){ /* an anonymous function */ }, 100)
var f = function(){ /* function ref */ }
É aqui que o JS obtém muito poder e flexibilidade. O Java suporta o primeiro até certo ponto (implementações de interface anônima), mas não o último - veja abaixo a atualização do Java 8.
Não está claro para mim qual (ou ambas) dessas é a definição apropriada de lambda.
JS definitivamente não é a primeira linguagem a oferecer suporte a esses recursos. De memória, acho que é pequeno o fato de os entusiastas da linguagem sempre elogiarem o apoio a lambdas.
BTW: Em Java, uma classe anônima é geralmente usada para passar uma definição de classe rapidamente para um argumento (muito usada em swing). Algo assim (de memória, não compilado):
someGuiContainer(new WidgetInterface()
{
public void importantMethodToDefine(){
// Handle having the method called in my special widget way
}
}
)
Atualizar
Java, a partir de 8, agora é oficialmente uma linguagem Lambda.
Agora você pode usar a seguinte sintaxe:
MathOperation addition = (int a, int b) -> a + b;
System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
Código Fonte