如何更简捷地在 Java 中进行函数式编程

本文介绍了Java中的findNemo方法,比较了命令式和声明式编程风格,强调了函数式编程中高阶函数的重要性,并通过例子展示了如何从命令式向声明式和函数式转变。
摘要由CSDN通过智能技术生成

public static void findNemo(List names) {

boolean found = false;

for(String name : names) {

if(name.equals(“Nemo”)) {

found = true;

break;

}

}

if(found)

System.out.println(“Found Nemo”);

else

System.out.println(“Sorry, Nemo not found”);

}

}

复制代码

findNemo() 方法首先初始化一个标识变量found,这种变量也被称为garbage变量,有些开发者经常将这些变量名称为ft或者temp,表示这些变量只是用来表示中间状态,它们本不该存在,这里则是将其命名位found

接下来程序遍历names列表的每一个元素。它检查这些元素是否与Nemo相匹配,如果匹配则将found置为true并跳出循环,

上面的代码风格可以说是每一位java开发者都熟悉的命令式风格,你定义了程序的每一步,包括迭代哪些元素,如何比较,匹配时执行哪些操作,何时跳出循环等。命令式风格使得你能对程序拥有绝对的控制,这看起来很不错。另一方面,在许多场景下,你可以以此来减少工作量。

声明式风格


在声明式编程下,你仍然需要告诉程序需要做什么,但是实现的细节交给底层的函数库。让我们使用声明式风格来重写上面的findNemo方法:

以声明式的风格实现findNemo

public static void findNemo(List names) {

if(names.contains(“Nemo”))

System.out.println(“Found Nemo”);

else

System.out.println(“Sorry, Nemo not found”);

}

复制代码

对比命令式风格的代码我们注意到,这里没有声明表示标识变量,而且没有使用循环来遍历每个元素。相反。我们直接使用contains()方法来实现了功能。总的来说,虽然你仍然需要告诉程序怎么做:检查集合中是否有我们想要的值,但是实现的细节已经交给底层函数库。

在命令式的代码中,你通过指定遍历操作来指示程序按你的想法来实现功能,但在声明式的版本中,你不用关心实现的过程如何运作,只需关心它返回的结果,根据返回的结果来执行你想要的操作,看起来更加省心。

寻来自己以声明式的风格编程和思考将大大简化你向函数式编程转变的过程。这是因为函数式编程构建于声明式风格之上,而声明式思维提供了从命令式编程到函数式编程的过渡。

函数式风格


虽然函数式编程的风格总是声明式的,但这不代表简单地使用声明式编程就是函数式编程。这是因为函数式编程还需要与高阶函数使用相结合。下面的图示表明了命令式、声明式和函数式编程之间的关系。

A logic diagram showing how the imperative, declarative, and functional programming styles differ and overlap.

Java中的高阶函数

Java中,你可以将对象作为参数传递给方法,在方法中创建对象并返回,对于函数你同样可以这样做:将函数作为参数传入方法中,在方法中处理函数,并将处理后的函数返回。

在这种情况下,方法是类的一部分:静态变量或示例,但是传入的函数只是方法的一个局部变量,不能将它和类本身或者实例关联起来。对于可以接收、处理、返回函数的方法就被称为高阶函数。

一个函数式编程的例子


在程序设计中使用一种新的编程风格需要你改变对程序的看法,你可以通过这个简单示例,来初探如何构建这类风格的更发杂的程序。

目录3:命令式风格的Map

import java.util.*;

public class UseMap {

public static void main(String[] args) {

Map<String, Integer> pageVisits = new HashMap<>();

String page = “https://agiledeveloper.com”;

incrementPageVisit(pageVisits, page);

incrementPageVisit(pageVisits, page);

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

最后

分布式技术专题+面试解析+相关的手写和学习的笔记pdf

还有更多Java笔记分享如下:

image

些内容对你有帮助,可以添加下面V无偿领取!(备注Java)**
[外链图片转存中…(img-Tw8Vmgvm-1710418242005)]

最后

分布式技术专题+面试解析+相关的手写和学习的笔记pdf

还有更多Java笔记分享如下:

[外链图片转存中…(img-BGwnsjMw-1710418242005)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值