【发布时间】:2020-11-06 10:45:42
【问题描述】:
Java 中的 lambda 表达式对象是怎样的?作为函数式编程的一部分的 lambda 表达式如何在 Java 中实现,Java 是一种面向对象的语言?理解 lambda 表达式需要哪些 Java 概念?
【问题讨论】:
Java 中的 lambda 表达式对象是怎样的?作为函数式编程的一部分的 lambda 表达式如何在 Java 中实现,Java 是一种面向对象的语言?理解 lambda 表达式需要哪些 Java 概念?
【问题讨论】:
你需要了解几件事:
1) 功能界面
public interface Runnable{
void run();
}
processNumber(int number)
2) 使用功能界面
public class MyRunnable implements Runnable{
public void run(){
System.out.println("Hello world");
}
}
public class MyClass{
public void myMethod(Runnable runnable){
runnable.run();
}
}
public static void main{
MyClass myClass = new MyClass();
myClass.myMethod(new MyRunnable());
}
3) lambda 在做什么
public static void main{
MyClass myClass = new MyClass();
myClass.myMethod(() -> System.out.println("Hello my world"));
}
public static void main{
MyClass myClass = new MyClass();
myClass.myMethod(new Runnable{
public void run(){
System.out.println("Hello my world");
});
}
【讨论】:
A lambda in Java is basically just a functional interface。主要是syntactic sugar。
Java 不是一种函数式语言,因此它不能完全实现函数式编程,只能实现其核心原则的一个子集。例如you can't implement proper typeclasses in Java。
无论如何,FP 没有标准定义,就像 OOP 没有标准定义一样。具体定义可能因来源而异,但总体思路(通常)是相同的。
【讨论】:
Java 是一种面向对象的语言。但是函数式语言的一些特性也可以在 java 中使用,比如 lambda
lambda 基本上是一个像函数一样工作的对象。 文档:https://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html
像往常一样,函数有一个输入和一个输出
函数中的输入:称为 T(as in take)
函数中的输出:称为 R(作为返回)
声明结构:Function<T,R> var_name = input_variables -> output_expression
示例:Function<Double,Double> Sigmoid = x->(1/( 1 + Math.pow(Math.E,(-1*x))));
或者还有其他方式(也称为方法引用)
这实际上是在访问底层的方法
Function<T,R> var_name = class_name :: method_name
示例:Function<Double,Double>Tanh = Math::tanh
使用函数
使用函数只需要调用函数类的apply(T t)方法
示例:double num = sigmoid.apply(0)
【讨论】: