Java 8中的lambda表达式如何实现函数式编程? 因为lambda表达式类型表示为接口,并且是面向对象的类类型。
普通方法调用与lambda表达式语句的区别是什么?
答案 0 :(得分:3)
在功能编程世界中,函数也是对象,可以视为传统对象。
Lambdas本身就是没有名称句柄的行为。如果你写x -> x + 1
,你刚刚创建了一个表示增量的值(或两个字符串的串联)。
此选项不仅可以将经典对象组合在一起,还可以组成行为/动作 - 这对于利用声明性编程的功能编程至关重要 - 为了能够实现这一点,您需要能够通过某种行为。
但是, Lambda表达式的存在并不会使任何语言自动运行 - 还有更多功能,例如:不变性,代数数据类型,缺乏副作用,仿函数,数据类型......等等。
因此,lambda和方法之间的关系在某种程度上类似于匿名值和类字段之间的关系。
答案 1 :(得分:3)
Lambda不支持函数式编程。它允许您以更多功能的方式处理数据。
Java是一种OOP语言,其中一等公民 是对象,而不是函数。因此,即使声明 lambda表达式,也必须将其分配给某些功能接口,正如您所说的那样是面向对象的类类型。
但是,在Java 8中,您可以使用 lambda表达式,这是一个匿名函数,就像一流公民一样处理功能样式的数据。例如。您可以将匿名函数作为方法参数传递。
accounts.stream()
.map(account -> account.getEmail())
.filter(email -> email.endsWith("gmail.com"))
这是一个有效的Java 8代码,其中作为方法参数传递,而不是值传递,而不是函数。当然,这些lambdas会成为实现功能接口{{1}的类的实例。相应地,{}和Function<Account,String>
,但它仍然允许您处理比旧Java版本更多功能样式的数据。
以功能样式处理数据的整个想法还包括 Streams,Functional Interfaces和Method Reference ,所以当你考虑用Java编写函数式编程时,你应该考虑它们。
答案 2 :(得分:1)
让我们想象一下没有类字段,setter和getter的纯OOP。 只有课程和方法...... 我们得到了一个纯函数式编程。 事实上,OOP - 通过添加状态来扩展功能编程。 State通过存储从类构造函数传入的输入参数来增加可重用性,节省时间。