JAVA 8函数式编程(一) 高阶函数

2023-11-08

首先给大家分享一个巨牛巨牛的人工智能教程,是我无意中发现的。教程不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵段子,像看小说一样,哈哈~我正在学习中,觉得太牛了,所以分享给大家!点这里可以跳转到教程

                    

函数式编程的核心在高阶函数与偏函数,在JAVA 8中,提供了很多函数式的接口,但跟Python、Javascript的函数相比较,还是存在较大的距离。

首先看一个高阶函数的例子,这里利用局部变量域特性,进行延迟求值,如下:

/** * 输入一定数量的参数,然后统一求值 * @param size 需要求值的个数 * @param fn 求值函数 * @return 函数对象 * 从函数的定义就可以看出,Java函数编程的内在思想还是面向对象 */public IntFunction<Integer> addNum(int size, ToIntFunction<List<Integer>> fn) {    //  声明局部变量,用于存储传入参数    final List<Integer> args = Lists.newArrayList();    return new IntFunction<Integer>() {        @Override        public Integer apply(int value) {            //  没有达到定义的数量之前,不求值            int result = -1;            if(args.size() == size) {                result = fn.applyAsInt(args);            } else {                args.add(value);            }            //  返回结果            return result;        }    };}
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

单元测试代码如下:

//  准备测试对象IntFunction<Integer> addFun = this.addNum(3, items -> {    //  利用reduce进行求值    return items.stream().reduce(0, (x, y) -> x + y);});//  方法调用还很生硬,有个莫名其妙的函数名apply,可能会引起业务的误解addFun.apply(1);addFun.apply(2);addFun.apply(3);//  超过了数量不求值int result = addFun.apply(4);//  1+2+3 = 6assertThat(result, IsEqual.equalTo(6));
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

结论

JAVA是一门非常优秀的面向对象语言,在函数式编程方面,跟其他函数语言相比,还是显得非常笨重与生涩,并且其内在体现出来的思想,依旧式面向对象,更重要的式,对函数式编程支持的特性较少,例如实现柯里化就非常困难。

           

浏览人工智能教程

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA 8函数式编程(一) 高阶函数 的相关文章

  • C语言函数大全-- v 开头的函数

    v 开头的函数 1 va start 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 va arg 2 1 函数说明 2 2 演示示例 3 va copy 3 1 函数说明 3 2 演示示例 4 va end 4 1 函数说明 4
  • 【Clion+CubeMX开发STM32】(三)为你的工程创建GIT远程仓库

    目录 下载安装git 链接github远程仓库 上传 下载安装git 网上已经有很多git的安装教程 本文就不再赘述了 推荐一个链接 下载安装Git链接 链接github远程仓库 一 注册你的Git账号并登录 二 创建远程仓库 填写仓库名
  • 小程序云开发多表查询

    原文链接 https juejin im post 5baadb086fb9a05ce2740968 关联表学习 文中代码并不是实际代码 伪代码不可直接运行 功能 用户 喜欢 文章 表 用户表 users id username 唯一标识
  • Java常用配置项和命令行

    JVM配置项说明 1 java虚拟机可配置参数整理 java参数配置参数分成三类 标准参数 开头 如 version 非标准参数 X开头 非稳定参数 XX开头 第一部分 JMM配置参数 Xmn 新生代大小 Xms 初始内存大小 Xmx 堆最
  • 【Gale Shapley 婚姻稳定匹配算法实现】

    原理 所有男性按照好感的高低向对应女性求婚 每个女性在所有的向她发出求婚的男性和其丈夫 如果暂无丈夫则不做比较 选择一个最喜欢的 如果这个最喜欢的是当前的丈夫 则婚姻关系不变 否则与当前丈夫离婚 并与向她发出求婚请求的男性结婚 在每个女性处
  • facebook NLP 自然语言处理框架 Pytext 简介

    自然语言处理 NLP 在现代深度学习生态中越来越常见 从流行的深度学习框架到云端API的支持 例如Google云 Azure AWS或Bluemix NLP是深度学习平台不可或缺的部分 尽管已经取得了令人难以置信的进步 但构建大规模的NLP
  • 开源OLAP引擎测评报告(SparkSql、Presto、Impala、HAWQ、ClickHouse、GreenPlum) ...

    本文为博主公司原创文章 仿冒必究 转载请回复留言 开源OLAP引擎测评报告 SparkSql Presto Impala HAWQ ClickHouse GreenPlum 易观CTO 郭炜 序现在大数据组件非常多 众说不一 在每个企业不同
  • 大语言模型(LLM)及使用方法

    大语言模型 LLM Large Language Model 是一种基于深度学习的自然语言处理技术 它使用深度神经网络来学习自然语言的统计规律 以便能够自动地生成 理解和处理自然语言 LLM通常具有数亿个参数和数十亿个标记 能够处理大规模的
  • spring websocket 利用注解接收和发送消息

    websocket只定义了文字和字节俩种形式的消息格式 没有像http协议那样子有那么丰富的协议规范 我们看看http的协议格式 websocket之所以没有自己定义那么多的协议格式 是希望有框架自己来实现定义这些格式 我们称之为webso
  • RAC+Dataguard环境中JDBC Failover配置

    在rac dataguard的环境中 为了减少应用宕机时间及改动 提高业务的可用性 要求jdbc客户端配置failover 同时为了很好地做应用分割 又不能load balance 即在第一个实例不行时 去偿试第二个实例 两个实例都不行时
  • 安卓调试

    欢迎关注 全栈工程师修炼指南 公众号 点击 下方卡片 即可关注我哟 设为 星标 每天带你 基础入门 到 进阶实践 再到 放弃学习 花开堪折直须折 莫待无花空折枝 作者主页 https www weiyigeek top 博客 https b
  • python中一个函数调用另一个函数中的变量

    我们在一个函数func2 中想使用另一个函数func1 中的变量 通常会使用返回值的方法 但是在调用的时候 也会将func2 整体运行一遍 如果func2 函数体的运行对于func1 取返回值没有影响则完全可以 但是如果func2 函数体的
  • linux操作分析lab3

    内核准备 内核和相关环境 wget https raw github com mengning mykernel master mykernel 2 0 for linux 5 4 34 patch sudo apt install axe
  • 浅谈TCP/IP协议

    一 TCP IP协议 TCP 传输控制协议 IP 因特网互联协议 TCP IP 合称网络通讯协议 是Internet最基本的协议 Internet国际互联网络的基础 由网络层的IP协议和传输层的TCP协议组成 TCP IP 定义了电子设备如
  • c++链表对应节点相加

    题目 给定两个链表 分别表示两个非负整数 它们的数字逆序存储在链表中 并且每个节点只存储一个数字 计 算两个数的和 并且返回和的链表头指针 如 输入 3 gt 6 gt 9 2 gt 5 gt 7 输出 5 gt 1 gt 7 gt 1 思
  • 自己动手写线程池——向JDK线程池进发

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • Java七大设计原则

    文章目录 一 单一职责原则 1 不遵守单一职责原则 2 遵守单一职责原则 二 接口隔离原则 编辑 三 依赖倒转原则 1 改进前 2 改进后 四 里氏替换原则 五 开闭原则OCP 六 迪米特法则 七 合成复用原则 八 UML类图 一 单一职责
  • form-group 两种常用使用

    用法一 运行结果如下 form group 增加盒子的下边界 form control 充满整个父元素 并且有换行作用 用法二 运行结果如下 control label 元素内实现包含内容右对齐 FR 海涛高软 QQ技术交流群 386476
  • java的反射

    一 反射的定义 基于 JDK8 Oracle官网对反射的解释是本文基于 JDK8 Oracle官网对反射的解释是 反射使 Java 代码可以发现有关已加载类的字段 方法和构造函数的信息 并在安全性限制内使用反射对这些字段 方法和构造函数进行
  • 熵,信息熵,香农熵,微分熵,交叉熵,相对熵

    2019 07 13 https blog csdn net landstream article details 82383503 https blog csdn net pipisorry article details 5169528

随机推荐

  • Java 实现二分法查找

    二分法 public class BinarySearch public static void main String args int array 1 5 8 11 19 22 31 35 40 45 48 49 50 int targ
  • Java面向对象,你真的会用吗?

    就在今天 自己写的一个C 项目 同事说用面向对象的思想写比较好 其实面向对象思想 感觉这个东西谁不知道啊 但是 确实这个程序没有使用 使用的好处是什么呢 又要如何使用呢 这是很值得思考的问题 面向对象简称OO Object Oriented
  • OpenWrt的学习和总结

    OpenWrt的学习和总结 内容目录 1OpenWrt背景知识 2 2OpenWrt 基础知识 2 2 1目录结构 2 2 2扩展软件包feeds 3 2 3OpenWrt SDK 4 2 4固件升级 8 3OpenWrt内部机制 8 3
  • c++涉及继承和虚继承时的内存布局

    原文地址 c 涉及继承和虚继承时的内存布局 作者 风箫夜吟 今天是清明节假期的第二天 天气阴沉 无心于游玩 遂决定宅于实验室 现在来说每天拜读一下大牛的博客已成生活中不可或缺之乐趣 但是俗话说的好 光说不练假把式 今天拜读了浩哥的博客 感触
  • java中filereader使用

    package dadeo import java io FileNotFoundException import java io FileReader import java io FileWriter import java io IO
  • jmeter压测监控服务器

    安装步骤可参考 Windows https www cnblogs com zjn 20161215 p 8652623 html Linux https blog csdn net liuqiuxiu article details 10
  • springboot集成zipkin

    1 下载zipkin 的jar 后台启动 比如127 0 0 1 9411 2 所有的springboot项目 pom xml添加依赖
  • 笔记——输出信息

    Input sensor was set to Monocular Loading ORB Vocabulary This could take a while Vocabulary loaded Camera Parameters fx
  • SpringBoot启动时忽略某些自动配置类

    SpringBoot启动时忽略某些自动配置类 最近业务要求对接数据 需要连接第三方的数据库 但是他们的都是内网 只能通过前置机上部署我们的项目 由于 我们与第三方对接的处理都写在单独的服务里 如果来一个第三方 单独再写一个服务会很麻烦 不好
  • OpenGL 学习笔记(四) 基础纹理

    一 载入纹理 1 从磁盘中载入Targa 文件 GLbyte gltReadTGABits const szFileName GLint iWidth GLint iHeight GLint iComponents GLenum eForm
  • 实测—fft IP核使用(包括ifft的配置使用)

    Vivado xilinx fft9 0 使用笔记 注 仿真实测1024点的转换需要经过1148个时钟周期才能得到转换结果 模块配置信号含义请参考pg109文档手册 写的贼烂会看晕 不详细说明 一 查找fft IP核按如下几图配置可实现正确
  • Model checking Part I

    Model Checking 文章目录 Model Checking 序言 可靠系统开发过程中的主要挑战 设计验证问题 design validation 现有实践方法 模拟和测试 simulation and tesing 本书主题 取代
  • 想去BAT、美团、京东和字节面试?那你必须懂他们的面试套路!

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 目录 面试官为啥要出这样一个开放式问题 生产消费模型及核心数据结构 支撑TB级数据写入的分布式架构 数据宕机场景下的高可用架构 支持数据不丢失的ack机制 最后的总结
  • 加密算法md5、AES、RSA、Base64的区别

    1 md5 不可逆的 即只能加密不能解密 只能加密字符串 var md5 require utils md5 js var sign md5 这是我要加密的内容 2 AES 与MD5类似 主要区别可逆 能加密也能解密 加密解密用同一把钥匙
  • ES模块化语法

    封装一个工具js文件 一 单个导出 定义utils js 方式 一 export function set console log set export function get console log get 方式 二 function
  • 双向BiGRU做多输入单输出预测模型,直接替换数据就可以用

    双向BiGRU做多输入单输出预测模型 直接替换数据就可以用 程序语言是matlab 需求最低版本为2020及以上 程序可以出真实值和预测值对比图 线性拟合图 可打印多种评价指标 PS 以下效果图为测试数据的效果图 主要目的是为了显示程序运行
  • Linking CXX shared library .....so FAILED

    Executing tasks clean smartcropperlib assembleDebug app assembleDebug clean UP TO DATE app clean smartcropperlib externa
  • 3ds Max 2019 Essential Training 3ds Max 2019基本培训 Lynda课程中文字幕

    3ds Max 2019 Essential Training 中文字幕 3ds Max 2019基本培训 中文字幕3ds Max 2019 Essential Training 3ds Max以其建模和渲染工具而闻名 这些优势在建筑 制造
  • 生成msf常用payload

    msf作为一款强大的漏洞检测工具 如何生成适用于msf的payload以及如何利用是使用msf的关键 今天就主要记录一下常用的payload以及如何使用 生成payload使用的工具是MSFVenom 下面看看他的帮助信息 在kali下可以
  • JAVA 8函数式编程(一) 高阶函数

    首先给大家分享一个巨牛巨牛的人工智能教程 是我无意中发现的 教程不仅零基础 通俗易懂 而且非常风趣幽默 还时不时有内涵段子 像看小说一样 哈哈 我正在学习中 觉得太牛了 所以分享给大家 点这里可以跳转到教程 函数式编程的核心在高阶函数与偏函