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

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面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/744641.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

392.判断子序列

题目&#xff1a;给定字符串s和t&#xff0c;判断s是否为t 的子序列。 字符串的一个子序列是原始字符串删除一些字符而不改变剩余字符相对位置形成的新字符串。 解题思路&#xff1a;s是否是 t 的子序列&#xff0c;因此只要能找到任意一种 s 在 t 中出现的方式&#xff0c;即…

代码随想录day19(1)二叉树:完全二叉树节点个数(leetcode222)

题目要求&#xff1a;求一个完全二叉树的节点个数 思路&#xff1a;首先完全二叉树可以用普通二叉树的方法来求&#xff0c;但是需要遍历所有的节点。 但是对于完全二叉树来说&#xff0c;只有最底层右侧的节点可能没满&#xff0c;其余每层节点都达到了最大值。所以我们可以…

Nwatch在stm32上的移植

目录 Nwatch在stm32上的移植前言实验目的移植game1_task任务相关代码片段结果本文中使用的工程 Nwatch在stm32上的移植 本文目标&#xff1a;Nwatch在stm32上的移植 按照本文的描述&#xff0c;应该可以跑通实验并举一反三。 先决条件&#xff1a;装有编译和集成的开发环境&…

Linux进程状态

目录 1.R运行状态&#xff08;running&#xff09; 2.S睡眠状态&#xff08;sleep&#xff09; 3.T或t状态&#xff08;stopped 或 tracing stop&#xff09; 4.Z状态&#xff08;zombie&#xff09;&#xff08;僵尸进程&#xff09; 1.R运行状态&#xff08;running&…

Self-supervised Contextual Keyword and Keyphrase Retrieval with Self-Labelling

文章目录 题目摘要方法数据集实验 题目 通过自我标记进行自我监督的上下文关键字和关键词短语检索 论文地址&#xff1a;https://www.preprints.org/manuscript/201908.0073/v1 项目地址&#xff1a;https://github.com/naister/Keyword-OpenSource-Data 摘要 在本文中&#x…

反向传播 — 简单解释

一、说明 关于反向传播&#xff0c;我有一个精雕细刻的案例计划&#xff0c;但是实现了一半&#xff0c;目前没有顾得上继续充实&#xff0c;就拿论文的叙述这里先起个头&#xff0c;我后面将修改和促进此文的表述质量。 二、生物神经元 大脑是一个由大约100亿个神经元组成的复…

寄存器(内存访问)

文章目录 寄存器&#xff08;内存访问&#xff09;1 内存中字的存储2 DS和[address]3 字的传送4 mov、add、sub指令5 数据段6 栈7 CPU提供的栈机制8 栈顶超界的问题9 push、pop指令10 栈段 寄存器&#xff08;内存访问&#xff09; 1 内存中字的存储 CPU中&#xff0c;用16位寄…

pycharm安装配置运行py代码与命令行运行

命令行(winr cmd python) 三个小箭头表示可以运行py代码 什么是解释器 文字翻译二进制 你对电脑说 我爱你 电脑不知道什么意思 你对电脑说 111001101000100010010001 111001111000100010110001 111001001011110110100000 电脑便知道了你爱它 那么如何给计算机说这些二进制串…

C++中的STL-string类

文章目录 一、为什么学习string类&#xff1f;1.1 C语言中的字符串 二、准库中的string类2.2 string类2.3 string类的常用接口说明2.4 string类对象的容量操作2.5 string类对象的访问及遍历操作2.5 string类对象的修改操作2.7 string类非成员函数2.8 模拟实现string 一、为什么…

多项式回归算法模拟

python3.6 环境 import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures# 生成随机数作为x变量&#xff0c;范围在-5到5之间&#xff0c;共100个样本 x np.random.un…

深度学习训练GPU显卡选型攻略

‍‍&#x1f3e1;博客主页&#xff1a; virobotics(仪酷智能)&#xff1a;LabVIEW深度学习、人工智能博主 &#x1f4d1;上期文章&#xff1a;『仪酷LabVIEW OD实战(5)——Object DetectionTensorRT工具包快速实现yolo目标检测』 &#x1f37b;本文由virobotics(仪酷智能)原创…

C++特性之一:继承

1. 派生类的成员变量、成员函数、构造、析构 2. 继承的切片 3. 重定义/隐藏 重定义/隐藏&#xff1a;派生类和基类有同名的成员&#xff0c;就叫隐藏。派生类的成员隐藏了基类的成员。 隐藏时可以通过类作用限定符来访问被隐藏的成员。 class Person { public:void Print(){…

代码学习记录19

随想录日记part19 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.03.14 主要内容&#xff1a;今天的主要内容是二叉树的第七部分&#xff0c;主要涉及修剪二叉搜索树 &#xff1b;将有序数组转换为二叉搜索树&#xff1b;把二叉搜索树转换为累加树。 669. 修剪…

【UE5】非持枪状态蹲姿移动的动画混合空间

项目资源文末百度网盘自取 在BlendSpace文件夹中单击右键选择动画(Animation)中的混合空间(Blend Space) &#xff0c;选择SK_Female_Skeleton&#xff0c;命名为BS_NormalCrouch 打开BS_NormalCrouch 水平轴表示角色的方向&#xff0c;命名为Direction&#xff0c;方向的最…

原生php单元测试示例

下载phpunit.phar https://phpunit.de/getting-started/phpunit-9.html 官网 然后win点击这里下载 新建目录 这里目录可以作为参考&#xff0c;然后放在根目录下 新建一个示例类 <?phpdeclare(strict_types1);namespace Hjj\DesignPatterns\Creational\Hello;class He…

Flutter可重排的列表控件ReorderableListView详解

文章目录 ReorderableListView 介绍主要属性使用示例注意事项 ReorderableListView 介绍 ReorderableListView 是 Flutter 中一个可重排的列表控件&#xff0c;允许用户通过拖动来改变列表项的顺序。它继承自 ListView&#xff0c;并提供了一些额外的功能来实现重排功能。 主…

安卓通过termux部署ChatGLM

一、安装Termux并进行相关配置 1、安装termux Termux 是一个 Android 终端仿真应用程序&#xff0c;用于在 Android 手机上搭建一个完整的 Linux 环境。 不需要 root 权限 Termux 就可以正常运行。Termux 基本实现 Linux 下的许多基本操作。可以使用 Termux 安装 python&…

DB算法原理与构建

参考&#xff1a; https://aistudio.baidu.com/projectdetail/4483048 Real-Time Scene Text Detection with Differentiable Binarization 如何读论文-by 李沐 DB (Real-Time Scene Text Detection with Differentiable Binarization) 原理 DB是一个基于分割的文本检测算…

区块链基础知识(上):区块链基本原理、加密哈希、公钥加密

目录 基本原理 加密哈希&#xff1a; 公钥加密&#xff1a; 希望有人向你发送只有你才能打开的加密文档/消息时使用 PKC 希望向其他人发送加密文档/消息并证明它确实由你发送时使用 PKC 使用 PKC 和加密哈希对文档/消息进行数字签名 交易哈希链使用数字签名转让数字资产所…

SenseNova 商汤日日新大模型 Function Call(函数调用)功能讲解和应用示例

考虑到使用 magic 申请 OpenAPI 的账号挺麻烦的&#xff0c;这里以商汤日日新大模型 SenseNova 介绍 Function Call 的功能。 官方链接&#xff1a;日日新开放平台 一、Function Call 是个啥&#xff1f; 在 LLM&#xff08;Large Language Model&#xff09; 语言大模型时代&…