iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么在Java8项目中实现一个函数式编程
  • 896
分享到

怎么在Java8项目中实现一个函数式编程

java8函数式编程ava 2023-05-31 07:05:41 896人浏览 八月长安
摘要

这期内容当中小编将会给大家带来有关怎么在Java8项目中实现一个函数式编程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。函数式的思考命令式编程一般我们实现一个系统有两种思考方式,一种专注于如何实现,比如下

这期内容当中小编将会给大家带来有关怎么在Java8项目中实现一个函数式编程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

函数式的思考

命令式编程

一般我们实现一个系统有两种思考方式,一种专注于如何实现,比如下厨做菜,通常按照自己熟悉的烹饪方法:首先洗菜, 然后切菜,热油,下菜,然后…… 这看起来像是一系列的命令合集。对于这种”如何做”式的编程风格我们称之为命令式编程, 它的特点非常像工厂的流水线、计算机的指令处理,都是串行化、命令式的。

CookingTask cookingTask = new CookingTask();cookingTask.wash();cookingTask.cut();cookingTask.deepFry();cookingTask.fried();...

声明式编程

还有一种方式你关注的是要做什么,我们如果用lambda和函数式来解决上述问题应该是这样的:

public class CookingDemo { public void doTask(String material, Consumer<String> consumer) {  consumer.accept(material); } public static void main(String[] args) {  CookingDemo cookingDemo = new CookingDemo();  cookingDemo.doTask("蔬菜", material -> System.out.println("清洗" + material));  cookingDemo.doTask("蔬菜", material -> System.out.println(material + "切片"));  cookingDemo.doTask("食用油", material -> System.out.println(material + "烧热"));  cookingDemo.doTask("", material -> System.out.println("炒菜")); }}

这里我们将烹饪的实现细节交给了函数库,它最大的优势在于你读起来就像是在问题陈述,采用这种方式我们很快可以理解它的功能, 当你在烹饪流程中添加其他步骤也变得非常简单,你只需要调用doTask方法将材料传递进去处理,比如在食用油烧热前我要打个鸡蛋

cookingDemo.doTask("鸡蛋", material -> System.out.println(material + "打碎搅拌均匀"));

而不用再编写一个处理鸡蛋的方法。

什么是函数式编程

对于“什么是函数式编程”这一问题最简化的回答是“它是一种使用函数进行编程的方式”。 每个人的理解都是不同的,其核心是:在思考问题时,使用不可变值和函数,函数对一个值进行处理,映射成另一个值。

不同的语言社区往往对各自语言中的特性孤芳自赏。现在谈Java程序员如何定义函数式编程还为时尚早, 但是,这根本不重要!我们关心的是如何写出好代码,而不是符合函数式编程风格的代码。

我们想象一下设计一个函数,输入一个字符串类型和布尔类型参数,输出一个整形参数。

int pos = 0;public Integer foo(String str, boolea flag){ if(flag && null != str){  pos++; } return pos;}

这个例子有输入也有输出,同时每次调用也可能会更行外部的变量值,这样的函数我们称之为是有副作用的函数。

在函数式编程的上下文中,一个“函数”对应于一个数学函数:它接受零个或多个参数,生成一个或多个结果,并且不会有任何副作用。 你可以把它看成一个黑盒,它接收输入并产生一些输出,像下面的函数

public Integer foo(String str, boolea flag){ if(flag && null != str){  return 1; } return 0;}

这种类型的函数和你在Java编程语言中见到的函数之间的区别是非常重要的(我们无法想象,log或者sin这样的数学函数会有副作用)。 尤其是,使用同样的参数调用数学函数,它所返回的结果一定是相同的。这里,我们暂时不考虑Random.nextInt这样的方法,

函数的副作用

当谈论“函数式”时,我们想说的其实是“像数学函数那样——没有副作用”。由此,编程上的一些精妙问题随之而来。 我们的意思是,每个函数都只能使用函数和像if-then-else这样的数学思想来构建吗? 或者,我们也允许函数内部执行一些非函数式的操作,只要这些操作的结果不会暴露给系统中的其他部分? 换句话说,如果程序有一定的副作用,不过该副作用不会为其他的调用者感知,是否我们能假设这种副作用不存在呢? 调用者不需要知道,或者完全不在意这些副作用,因为这对它完全没有影响。

当我们希望能界定这二者之间的区别时,我们将第一种称为纯粹的函数式编程,后者称为函数式编程。

在编程实战中我们很难用Java语言以纯粹的函数式来完成一个程序的,因为很多老的代码包括标准库的函数都是有副作用的 (调用Scanner.nextLine就有副作用,它会从一个文件中读取一行, 通常情况两次调用的结果完全不同)。你希望为你的系统 编写接近纯函数式的实现,需要确保你的代码没有副作用。假设这样一个函数或者方法,它没有副作用,进入方法体执行时会对一个字段的值加一, 退出方法体之前会对该字段减一。对一个单线程的程序而言,这个方法是没有副作用的,可以看作函数式的实现。

我们构建函数式的准则是,被称为“函数式”的函数或方法都只能修改局部变量,除此之外,它引用的对象都应该是final的。 所有的引用类型字段都指向不可变对象。

上述就是小编为大家分享的怎么在Java8项目中实现一个函数式编程了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网精选频道。

--结束END--

本文标题: 怎么在Java8项目中实现一个函数式编程

本文链接: https://www.lsjlt.com/news/224297.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在Java8项目中实现一个函数式编程
    这期内容当中小编将会给大家带来有关怎么在Java8项目中实现一个函数式编程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。函数式的思考命令式编程一般我们实现一个系统有两种思考方式,一种专注于如何实现,比如下...
    99+
    2023-05-31
    java8 函数式编程 ava
  • Java8中怎么实现一个函数式接口
    这篇文章给大家介绍Java8中怎么实现一个函数式接口,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。以下我们继续深入Java8函数式编程模型public class Test1 { ...
    99+
    2023-05-30
    java8
  • 怎么在java项目中实现一个单例模式
    这篇文章将为大家详细讲解有关怎么在java项目中实现一个单例模式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。java设计模式之单例模式定义:如果一个类始终只能创建一个实例,那么这个类被称为...
    99+
    2023-05-31
    java 单例模式 ava
  • 怎么在Java项目中实现一个策略模式
    怎么在Java项目中实现一个策略模式?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。策略模式指:策略模式指将程序中可变部分抽象分离成一系列的算法,并将每一个算法封装起来,而且...
    99+
    2023-05-31
    java ava 策略模式
  • 怎么在Java中实现函数式编程
    本篇文章为大家展示了怎么在Java中实现函数式编程,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。常用的java框架有哪些1.SpringMVC,Spring Web MVC是一种基于Java的实现了...
    99+
    2023-06-14
  • 怎么在Java项目中实现一个观察者模式
    怎么在Java项目中实现一个观察者模式?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。观察者模式:对象间的一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象(被观察)。...
    99+
    2023-05-31
    java 观察 观察者模式
  • 怎么在Java项目中实现一个工厂方法模式
    本篇文章为大家展示了怎么在Java项目中实现一个工厂方法模式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其...
    99+
    2023-05-31
    java 工厂方法模式 ava
  • 怎么在Java项目中实现一个简单工厂模式
    今天就跟大家聊聊有关怎么在Java项目中实现一个简单工厂模式,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。简单工厂模式解释:     ...
    99+
    2023-05-31
    简单工厂模式 java ava
  • 怎么在java项目中实现一个黄金分割数
    本文章向大家介绍怎么在java项目中实现一个黄金分割数的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用...
    99+
    2023-06-06
  • Golang函数式编程在大型项目中的应用
    函数式编程在大型项目中带来以下好处:提高并发性:纯函数可并发执行,提升项目性能。减少错误:不变性和纯函数减少错误,确保函数不更改输入或产生副作用。提高可测试性:纯函数易于测试,测试结果可...
    99+
    2024-04-13
    golang 函数式编程 标准库
  • 怎么在Java8中实现一个线程安全日期类
    这期内容当中小编将会给大家带来有关怎么在Java8中实现一个线程安全日期类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。LocalDateTimeJava8新特性之一,新增日期类。在项目开发过程中经常遇到...
    99+
    2023-06-14
  • 怎么在Java项目中实现一个内置观察者模式
    这期内容当中小编将会给大家带来有关怎么在Java项目中实现一个内置观察者模式,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。主要使用到的Java API就两个类:Observer接口:观察者对象,监听被观察...
    99+
    2023-05-31
    java 内置观察者模式 观察
  • 如何在Java项目中实现一个命令模式
    如何在Java项目中实现一个命令模式?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。定义:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排...
    99+
    2023-05-31
    java ava 命令模式
  • 在java项目中如何实现一个单例模式
    在java项目中如何实现一个单例模式?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。java设计模式--单例模式 单例设计模式Singleton是一种创...
    99+
    2023-05-31
    java 单例模式 ava
  • 怎么中JAVA项目中实现一个访问者模式
    这篇文章将为大家详细讲解有关怎么中JAVA项目中实现一个访问者模式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。访问者模式:一个作用于某对象结构中各元素的操作,使你可以在不改变各元素类数据结...
    99+
    2023-05-31
    java ava 访问者模式
  • 如何在Java项目中利用字符流实现一个io编程
    如何在Java项目中利用字符流实现一个io编程?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。案例1:读取一个文件并写入到另一个文件中,char[] 来中转。首先要在E盘下创建一...
    99+
    2023-05-31
    java io编程 字符流
  • 怎么在java项目中实现一个链栈存储
    本篇文章给大家分享的是有关怎么在java项目中实现一个链栈存储,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。如下所示:package com.learn.algorithm.l...
    99+
    2023-05-31
    java 链栈存储 ava
  • 怎么在Java项目中实现一个分页功能
    怎么在Java项目中实现一个分页功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。分页对象public class PageUtils imp...
    99+
    2023-05-31
    java ava 目中
  • 怎么在JAVA项目中实现一个静态单例
    怎么在JAVA项目中实现一个静态单例?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。JAVA  静态的单例的实例详解实现代码:public c...
    99+
    2023-05-31
    java 单例 ava
  • 怎么在html5项目中实现一个录音功能
    这篇文章给大家介绍怎么在html5项目中实现一个录音功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。步骤1由于新的api是通过navigator.mediaDevices.getUserMedia,且返回一个prom...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作