Java 8特性(一) 之 手写Stream流filter、map和forEach方法

Java 8特性(一) 之 手写Stream流filter、map和forEach方法

今天看了一下Java 8的Stream流,学习了一下函数式编程,这才感受函数式编程如此爽,之前就使用过ES8.7.1的函数式编程,当时就在想啥时候咱也能写出这么秀的代码,现在这不就给安排上了。下面的代码是参考了黑马程序的《Java 8流式编程》的教程写的,哈哈哈。

当中的map方法的参数为Function< T, R>,传入的参数是一个函数,与此同时map方法也被称之为高阶函数,它的定义为,传输参数为函数对象的方法称之为高阶函数。 下面就来简单的讲解一下Function< T, R>,这是一个拥有输入输出的过程,传入的参数类型为T,返回的参数类型为R,在程序中我写的函数式对象为item -> item * item

当中的filter方法参数为Predicate<T>,这个函数式接口的传入的类型为T,返回值为Boolean类型,拥有一个test方法。

当中的forEach方法参数为Consumer,这个函数式接口传入的参数为类型T,返回值类型为void,Consumer函数式接口拥有一个accept方法。

public class SimpleStream<T> {public static void main(String[] args) {List<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);SimpleStream.of(list).filter(item -> (item & 1) == 0).map(item -> item * item).forEach(System.out::println);}/*** map方法** @param function* @return* @param <R>*/public <R> SimpleStream<R> map(Function<T, R> function) {List<R> result = new ArrayList<>();for (T t : collection) {R r = function.apply(t);result.add(r);}return new SimpleStream<R>(result);}/*** 过滤方法** @param predicate* @return*/public SimpleStream<T> filter(Predicate<T> predicate) {List<T> result = new ArrayList<>();for (T t : collection) {if (predicate.test(t)) {result.add(t);}}return new SimpleStream<T>(result);}/*** 循环遍历方法** @param consumer*/public void forEach(Consumer<T> consumer) {for (T t : collection) {consumer.accept(t);}}private Collection<T> collection;public SimpleStream(Collection<T> collection) {this.collection = collection;}public static <T> SimpleStream<T> of(Collection<T> collection) {return new SimpleStream<>(collection);}}

运行结果

写在最后

代码精选(www.codehuber.com),程序员的终身学习网站已上线!

如果这篇【文章】有帮助到你,希望可以给【JavaGPT】点个赞👍,创作不易,如果有对【后端技术】、【前端领域】感兴趣的小可爱,也欢迎关注❤️❤️❤️ 【JavaGPT】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💝💝💝!

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

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

相关文章

【日常运维】pm2起的应用删除应用日志后,发现磁盘控间没有释放,lsof | grep delete 也没看到相关进程,怎么办?

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

三维dp,LeetCode 1463. 摘樱桃 II

目录 一、题目 1、题目描述 2、接口描述 python3 cpp 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 python3 cpp 一、题目 1、题目描述 给你一个 rows x cols 的矩阵 grid 来表示一块樱桃地。 grid 中每个格子的数字表示你能获得的樱桃数目。 你有…

FastJson==xml与json格式互转工具类

一、xml格式介绍 XML&#xff08;eXtensible Markup Language&#xff09;是一种标记语言&#xff0c;它的设计目的是为了存储和传输数据&#xff0c;而不是用于显示数据&#xff0c;这一点与HTML&#xff08;HyperText Markup Language&#xff09;不同。以下是XML的一些关键…

流畅的python-学习笔记_协议+继承优缺点

接口和协议 python动态语言&#xff0c;没有interface等概念&#xff0c;接口和协议方法有的也有替代品&#xff0c;所以类似于鸭子类型&#xff0c;只关注行为像鸭子&#xff0c;不关注它是不是鸭子。不是每个接口都得实现&#xff0c;这是允许的 猴子补丁 可动态给对象添加…

Java的BIO/NIO/AIO

1. Java中的BIO、NIO和AIO的基本概念及其主要区别 BIO (Blocking I/O): 传统的同步阻塞I/O模型。每个连接创建成功后都需要一个线程来处理&#xff0c;如果连接没有数据可读&#xff0c;则线程会阻塞在读操作上。这种模型简单易理解&#xff0c;但在高并发环境下会消耗大量系统…

ORACLE 19C RAC DIAG进程消耗大量内存的分析

近期一个ORACLE 19C的RAC环境&#xff0c;多次出现数据库实例的后台进程DIAG消耗很多内存&#xff08;达到20G&#xff09;&#xff0c;节点1、节点2都出现过次问题。 问题分析&#xff1a;通过对DIAG进程TRACE分析&#xff0c;结合在ORACLE官方后台进行问题、BUG查询匹配&…

【ITK配准】第七期 尺度(Metric)-Kullback-Leiber距离Metric

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享ITK中的互信息Metric,即itk::KullbackLeiblerCompareHistogramImageToImageMetric,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! …

全局测试用例环境和访问共享资源的GoogleTest教程

全局测试用例环境和访问共享资源的GoogleTest教程 介绍 在软件开发中&#xff0c;测试是确保软件质量的关键步骤之一。GoogleTest是一个流行的C测试框架&#xff0c;它提供了丰富的功能来编写和运行测试用例。在实际的软件项目中&#xff0c;有时需要在测试用例之间共享一些资…

思腾合力受邀参加VALSE 2024视觉与学习青年学者研讨会

在充满学术氛围的五月&#xff0c;思腾合力荣幸受邀参加了于2024年5月5-7日在重庆举行的第十四届VALSE大会。作为视觉与学习领域的顶级交流平台&#xff0c;VALSE大会每年都吸引着全国专家与学者的目光。 本次大会不仅延续了往届的高水平学术研讨&#xff0c;还进一步拓宽了研究…

台湾精锐APEX行星减速机噪音产生及优化策略

台湾精锐APEX行星减速机在各种机械装置中的应用逐渐广泛。然而&#xff0c;其噪音问题也日益凸显。噪音不仅影响工作环境&#xff0c;还可能对设备的正常运行和使用寿命产生负面影响。因此&#xff0c;了解APEX行星减速机噪音的产生以及优化噪音问题变得至关重要。 APEX行星减…

安卓自动化脚本制作流程详解!

在移动应用日益普及的今天&#xff0c;安卓自动化脚本制作成为了开发者提高工作效率、减少重复劳动的重要手段&#xff0c;本文将详细介绍安卓自动化脚本的制作流程&#xff0c;并通过五段源代码的实例&#xff0c;帮助读者更好地理解和掌握这一过程。 一、安卓自动化脚本制作…

从U盘到云端:企业数据泄露的那些事

在企业的日常运营中&#xff0c;数据安全无疑是极为关键的一环。无论是U盘还是云&#xff0c;数据泄露事件的发生都可能导致企业的核心机密被窃取&#xff0c;甚至损害企业的商业利益和声誉。以下是关于从U盘到云端&#xff0c;企业数据泄露的一些常见情况和应对策略。 U盘&…

各种流量包特征

[CVE-2013-1966] Apache Struts2 远程命令执行漏洞 要执行的命令在exec里面&#xff0c;而且回显数据包里面有明显执行结果回显 [CVE-2017-8046] Spring Data Rest 远程命令执行漏洞 回显不明显&#xff0c;考试提供的解码工具不能解密&#xff0c; [CVE-2017-12149] JBOSS…

Kibana初始化启动失败原因及解决办法

一&#xff09; Unable to retrieve version information from Elasticsearch nodes 报错日志&#xff1a; 折叠源码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [rootnode1 bin]# ./kibana --allow-root log [16:03:07.086] [info][plugins-service] Plugin &…

揭秘全网热门话题:抖音快速涨粉方法,巨量千川投流助你日增10000粉

在当今社交媒体的时代( 千川投流&#xff1a;hzzxar&#xff09;抖音成为了年轻人分享自己才华和生活的平台。然而&#xff0c;要在抖音上快速获得关注和粉丝&#xff0c;却不是一件容易的事情。今天&#xff0c;我们将揭秘全网都在搜索的抖音快速涨1000粉的秘籍&#xff0c;带…

API攻击为啥盛行,企业应该如何防范

一.API接口到底是什么 API,中文名称叫应用程序编程接口,是现代移动、SaaS 和 Web应用程序的一个关键组成部分。听起来很晦涩难懂,但其实我们每个人的生活都会接触 API:早上出门,打开手机看看天气,天气APP需要通过 API 提取数据;到了公司,被安排出差,赶紧上网查票,购票网站更新…

Python 基础入门

文章目录 路线配置环境2.语言3.数据结构 小结 路线 最近在写点东西&#xff0c;也在用一门之前没怎么用过的语言&#xff1b;python。写下我的学习途径及方法&#xff0c;仅供参考。 配置环境语言学习数据结构一些库的学习等等 配置环境 最开始&#xff0c;我用的事pycharm…

【3dmax笔记】027:配置修改器集、工具栏自定义与加载

文章目录 一、配置修改器集二、自定义工具栏三、加载工具栏 一、配置修改器集 可以把自己常用的修改命令放到右边框中的部分&#xff0c;便于自己的操作&#xff0c;省去了每次都要花半天时间找命令的尴尬。新建一个二维或者三维物体&#xff0c;点击修改面板&#xff0c;点击…

运算符重载:妈妈我会自己写运算符了

目录 一、题目&#xff1a; 二、分析&#xff1a; 1.矩阵&#xff08;matrix&#xff09;部分&#xff1a; 2.程序部分&#xff1a; 三、代码&#xff1a; 四、提升&#xff1a; 1、思路&#xff1a; 2、重载流插入运算符“<<” 3、代码&#xff1a; 五、进阶&…

尊享面试100题(314.二叉树的垂直遍历python)

题目关键词&#xff0c;从左到右&#xff0c;从上到下&#xff0c;那么使用bfs宽度优先算法。 使用字典v保存每一列的值。 class Solution:def verticalOrder(self, root: Optional[TreeNode]) -> List[List[int]]:if not root: return []v defaultdict(list)qu deque()…