如何更简捷地在 Java 中进行函数式编程,java性能优化面试题

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

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

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

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文

public static void main(String[] args) {

List names =

Arrays.asList(“Dory”, “Gill”, “Bruce”, “Nemo”, “Darla”, “Marlin”, “Jacques”);

findNemo(names);

}

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);

System.out.println(pageVisits.get(page));

}

public static void incrementPageVisit(Map<String, Integer> pageVisits, String page) {

if(!pageVisits.containsKey(page)) {

pageVisits.put(page, 0);

}

最近我根据上述的技术体系图搜集了几十套腾讯、头条、阿里、美团等公司21年的面试题,把技术点整理成了视频(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-sGkSF4kR-1713698539377)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值