本文小编为大家详细介绍“Java中的函数式编程怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中的函数式编程怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。函数式编程的理论基础是阿隆佐丘奇(Alonzo Church)于 1930 年代提出的 演算(Lambda Calculus)。 演算是一种形式系统,用于研究函数定义、函数应用和递归。它为计算理论和免费云主机域名计算机科学的发展奠定了基础。随着 Haskell(1990年)和 Erlang(1986年)等新一代函数式编程语言的诞生,函数式编程开始在实际应用中发挥作用。随着硬件越来越便宜,程序的规模和复杂性都在呈线性的增长。这一切都让编程工作变得困难重重。我们想方设法使代码更加一致和易懂。我们急需一种语法优雅,简洁健壮,高并发,易于测试和调试的编程方式,这一切恰恰就是函数式编程(FP)的意义所在。函数式语言已经产生了优雅的语法,这些语法对于非函数式语言也适用。 例如:如今 Python,Java 8 都在吸收 FP 的思想,并且将其融入其中,你也可以这样想:OO(object oriented,面向对象)是抽象数据,FP(functional programming,函数 式编程)是抽象行为。用传统形式和 Java 8 的方法引用、Lambda 表达式分别演示。代码示例:输出结果:hello there?
HELLO THERE!
Hello
Hello there Hello thereLambda 表达式是使用最小可能语法编写的函数定义:(原则)Lambda 表达式产生函数,而不是类Lambda 语法尽可能少,这正是为了使 Lambda 易于编写和使用Lambda 用法:输出结果:Oh! No Parens!
Hi! More details
Short info
Pi! 3.14159
moreLines()
from moreLines()总结:Lambda 表达式通常比匿名内部类产生更易读的代码,因此我们将尽可能使用它们。方法引用由类名或者对象名,后面跟着::
然后跟方法名称,使用示例:输出结果:call()
Hello, Bob
valuable information
Help!使用 Lambda 和方法引用改变 Runnable 接口的写法:输出结果:Anonymous
lambda
Go::go()使用未绑定的引用时,需要先提供对象:输出结果:X::f()
X::f()我们通过更多示例来证明,通过未绑的方法引用和 interface 之间建立关联:可以捕获构造函数的引用,然后通过引用构建对象总结方法引用在很大程度上可以理解为创建一个函数式接口的实例方法引用实际上是一种简化 Lambda 表达式的语法糖,它提供了一种更简洁的方式来创建一个函数式接口的实现在代码中使用方法引用时,实际上是在创建一个匿名实现类,引用方法实现并且覆盖了接口的抽象方法方法引用大多用于创建函数式接口的实现Lambda 包含类型推导Java 8 引入java.util.function
包,解决类型推导的问题通过函数表达式创建 Interface:以上是自己创建 函数式接口的示例。但在java.util.function
包旨在创建一组完整的预定义接口,使得我们一般情况下不需再定义自己的接口。在java.util.function
的函数式接口的基本使用基本准测,如下只处理对象而非基本类型,名称则为 Function,Consumer,Predicate 等,参数通过泛型添加如果接收的参数是基本类型,则由名称的第一部分表示,如 LongConsumer, DoubleFunction,IntPredicate 等如果返回值为基本类型,则用 To 表示,如 ToLongFunction 和 IntToLongFunction如果返回值类型与参数类型一致,则是一个运算符如果接收两个参数且返回值为布尔值,则是一个谓词(Predicate)如果接收的两个参数类型不同,则名称中有一个 Bi下面枚举了基于 Lambda 表达式的所有不同 Function 变体的示例:以下是用表格整理基本类型相关的函数式接口:在使用函数接口时,名称无关紧要——只要参数类型和返回类型相同。Java 会将你的方法映射到接口方法。示例:输出结果:accept()
someOtherName()将方法引用应用于基于类的函数式接口(即那些不包含基本类型的函数式接口)以下是用表格整理的非基本类型的函数式接口:java.util.functional 中的接口是有限的,如果需要 3 个参数函数的接口怎么办?自己创建就可以了,如下:验证如下:高阶函数(Higher-order Function)其实很好理解,并且在函数式编程中非常常见,它有以下特点:接收一个或多个函数作为参数返回一个函数作为结果先来看看一个函数如何返回一个函数:然后再看看,如何接收一个函数作为函数的参数:总之,高阶函数使代码更加简洁、灵活和可重用,常见于Stream
流式编程中在 Java 中,闭包通常与 lambda 表达式和匿名内部类相关。简单来说,闭包允许在一个函数内部访问和操作其外部作用域中的变量。在 Java 中的闭包实际上是一个特殊的对象,它封装了一个函数及其相关的环境。这意味着闭包不仅仅是一个函数,它还携带了一个执行上下文,其中包括外部作用域中的变量。这使得闭包在访问这些变量时可以在不同的执行上下文中保持它们的值。让我们通过一个例子来理解 Java 中的闭包:需要注意的是,在 Java 中,闭包捕获的外部变量必须是final
或者是有效的final
(即在实际使用过程中保持不变)。这是为了防止在多线程环境中引起不可预测的行为和数据不一致。函数组合(Function Composition)意为 “多个函数组合成新函数”。它通常是函数式 编程的基本组成部分。先看 Function 函数组合示例代码:代码示例使用了 Function 里的 compose() 和 andThen(),它们的区别如下:compose 是先执行参数中的函数,再执行调用者andThen 是先执行调用者,再执行参数中的函数输出结果:AFTER ALL AMBULANCES
_fter _ll _mbul_nces然后,再看一段 Predicate 的逻辑运算演示代码:p4 通过函数组合生成一个复杂的谓词,最后应用在 filter() 中:negate():取反值,内容不包含 barand(p2):长度小于 5or(p3):或者包含 f3输出结果:foobar
foobaz在java.util.function
中常用的支持函数组合的方法,大致如下:柯里化(Currying)是函数式编程中的一种技术,它将一个接受多个参数的函数转换为一系列单参数函数。让我们通过一个简单的 Java 示例来理解柯里化:输出结果:Hi Ho
Hi Ho
Hup Ho
Hup Hey接下来我们添加层级来柯里化一个三参数函数:输出结果:Hi Ho Hup在处理基本类型的时候,注意选择合适的函数式接口:输出结果:9读到这里,这篇“Java中的函数式编程怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注百云主机行业资讯频道。
这篇“纯css如何实现二级菜单”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“纯css如何实现二级菜单”文章吧。 HTML结构设计首先,我们需要在…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。