Por que as expressões lambda são objetos em Java? [duplicado]

Nov 06 2020

Como são os objetos de expressões lambda em Java? Como as expressões lambda, que fazem parte da programação funcional, podem ser implementadas em Java, que é uma linguagem orientada a objetos? Quais conceitos Java eu ​​preciso para entender as expressões lambda?

Respostas

2 JakubZnamenáček Nov 06 2020 at 19:17

Você precisa entender algumas coisas:

1) Interface funcional

  • interface que tem apenas um método público
public interface Runnable{
    void run();
}
  • este é um exemplo de interface funcional, pode ter diferentes tipos de métodos, como int processNumber(int number)
  • apenas lembre-se de que pode haver apenas um método (um método não implementado, os padrões não contam)

2) Usando interface funcional

  • você pode implementar sua interface funcional em sua classe, digamos MyRunnable
public class MyRunnable implements Runnable{
    public void run(){
        System.out.println("Hello world");
    }
}
  • do que você pode passar sua classe MyRunnable em outros métodos, seu objeto apenas normal
public class MyClass{
    public void myMethod(Runnable runnable){
        runnable.run();
    }
}
  • isso imprimiria "Olá, mundo"
public static void main{
    MyClass myClass = new MyClass();
    myClass.myMethod(new MyRunnable());
}

3) O que lambda está fazendo

  • então o que lambda permite que você crie uma implementação anônima de interface
public static void main{
    MyClass myClass = new MyClass();
    myClass.myMethod(() -> System.out.println("Hello my world"));
}
  • isso imprimiria "Olá meu mundo"
  • você está apenas criando uma implementação anônima de Runnable e passando-a para MyMethod
  • é apenas açúcar sintático para isso
public static void main{
    MyClass myClass = new MyClass();
    myClass.myMethod(new Runnable{
        public void run(){
            System.out.println("Hello my world");
        });
}
1 m0skit0 Nov 06 2020 at 17:50

Um lambda em Java é basicamente apenas uma interface funcional . É principalmente açúcar sintático .

Java não é uma linguagem funcional e, como tal, não pode implementar totalmente a programação funcional, apenas um subconjunto de seus princípios básicos. Por exemplo, você não pode implementar typeclasses adequadas em Java .

Em qualquer caso, não existe uma definição padrão para FP, da mesma forma que não existe uma definição padrão para OOP. A definição específica pode variar dependendo das fontes, mas as idéias gerais são (geralmente) as mesmas.

Coder Nov 06 2020 at 19:04

Java é uma linguagem orientada a objetos. Mas alguns recursos de linguagens funcionais também estão disponíveis em java, como lambda

lambda é basicamente um objeto que atua como uma função. documentação:https://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html

como de costume, uma função tem uma entrada e uma saída

entradas em funções: referido como T (como em take)

saídas em função: referido como R (como em retorno)

estrutura da declaração: Function<T,R> var_name = input_variables -> output_expression

exemplo: Function<Double,Double> Sigmoid = x->(1/( 1 + Math.pow(Math.E,(-1*x))));

ou existe outra forma (também conhecida como referência de método)

isso é, na verdade, acessar o método por baixo do capô

Function<T,R> var_name = class_name :: method_name

exemplo: Function<Double,Double>Tanh = Math::tanh

Usando uma função

Para usar uma função você só precisa chamar o apply(T t)método da classe de função

exemplo: double num = sigmoid.apply(0)