首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 8中的lambda表达式如何实现函数式编程?

Java 8中的lambda表达式如何实现函数式编程?
EN

Stack Overflow用户
提问于 2017-08-17 13:28:01
回答 3查看 2.8K关注 0票数 2

Java 8中的lambda表达式如何支持函数式编程?因为lambda表达式类型被表示为接口,并且是面向对象的类类型。

普通方法调用与lambda表达式语句有什么不同?

EN

回答 3

Stack Overflow用户

发布于 2017-08-17 13:40:19

在函数式编程世界中,函数也是对象,可以将其视为传统对象。

Lambda本身就是没有名字句柄的简单行为。如果您编写x -> x + 1,那么您只是创建了一个表示增量(或两个字符串的连接)的值。

此选项不仅允许将经典对象组合在一起,还允许组合行为/动作-这对于大量使用声明性编程的函数式编程至关重要-为了能够实现这一点,您需要能够以某种方式传递行为。

但是, Lambda表达式的存在并不会自动使任何语言成为函数式--还有更多的东西,例如不变性,代数数据类型,缺乏副作用,函数式,数据类型……诸若此类。

因此,lambda和方法之间的关系在某种程度上类似于匿名值和类字段之间的关系。

票数 3
EN

Stack Overflow用户

发布于 2017-08-17 14:28:44

Lambda不支持函数式编程。它允许你以更函数式的方式处理数据。

Java是一种OOP语言,其中一等公民是对象,而不是函数。因此,即使您声明了一个lambda表达式,您也必须将其分配给某个Functional Interface,正如您所说的,这是一个面向对象的类类型。

然而,在Java8中,您可以使用lambda表达式,这是一个匿名函数,可以像一等公民一样使用函数式处理数据。例如,您可以将匿名函数作为方法参数进行传递。

代码语言:javascript
复制
accounts.stream()
        .map(account -> account.getEmail())
        .filter(email -> email.endsWith("gmail.com"))

这是一段有效的Java8代码,在其中传递的是方法参数,而不是值,而是函数。当然,在幕后,这些lambda成为实现函数接口Function<Account,String>Predicate<String>的类的实例,但它仍然允许您以比旧Java版本更多的函数风格处理数据。

以函数式风格处理数据的整个思想还涉及到流、函数接口和方法引用,因此在考虑Java中的函数式编程时,您应该将它们全部考虑在内。

票数 3
EN

Stack Overflow用户

发布于 2017-08-17 23:20:41

让我们想象一下没有类字段、setter和getter的纯OOP。只有类和方法...我们得到了一个纯函数式编程。事实上,OOP通过添加状态扩展了函数式编程。状态增加了可重用性,节省了时间,通过存储输入参数,从类构造函数传入。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45727215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档