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://xiahunao.cn/news/3019610.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

手拿滑块撕瑞数 我叫超弟你记住!!什么腾讯滑块、数美、阿里通通拿下!最新版2024.5.8号

本文章非标题党&#xff0c;可提供主流验证码解决方案及成品、补环境框架、逆向教学 不论你是逆向小白、亦或是需求方都可通过本文章各取所需&#xff01;&#xff01; 废话不多说&#xff0c;老规矩&#xff0c;附上腾讯旗下验证码程序运行图&#xff0c;附程序运行时间 &…

XShell 无法连上 VirtualBox的系统问题排查

之前一直都是可以正常使用的&#xff0c;过了一段时间之后&#xff0c;我发现无法使用XShell连接我之前安装的Centos 系统了。 我在centos中ping windows的IP地址&#xff0c;是可以 ping 通的&#xff0c; 百度也可以 ping 通&#xff0c;但是在 windows 中 ping centos的IP地…

LINUX 入门 4

LINUX 入门 4 day6 7 20240429 20240504 耗时&#xff1a;240min 课程链接地址 第4章 LINUX环境编程——实现线程池 C基础 第3节 #define里面的行不能乱空行&#xff0c;要换行就打\ typedef 是 C 和 C 中的一个关键字&#xff0c;用于为已有的数据类型定义一个新的名字。…

国内验签的SSL证书!重要数据绝不出境

SSL证书作为保障网络数据传输安全的重要工具&#xff0c;其作用日益凸显。特别是在国内&#xff0c;随着网络安全法的实施与个人信息保护的加强&#xff0c;国内验证签发的SSL证书更是成为企业与个人在线业务不可或缺的一部分。本文将深入探讨国内验签SSL证书的技术原理、验证流…

【stomp 实战】spring websocket用户消息发送源码分析

这一节&#xff0c;我们学习用户消息是如何发送的。 消息的分类 spring websocket将消息分为两种&#xff0c;一种是给指定的用户发送&#xff08;用户消息&#xff09;&#xff0c;一种是广播消息&#xff0c;即给所有用户发送消息。那怎么区分这两种消息呢?那就是用前缀了…

U盘管控软件,禁止员工用U盘拷贝机密数据,防止信息通过U盘泄露

随着信息技术的不断发展&#xff0c;U盘等便携式存储设备已成为我们日常工作中不可或缺的工具。然而&#xff0c;随着U盘的普及&#xff0c;企业面临的信息泄露风险也在不断增加。为了确保企业的信息安全&#xff0c;许多企业开始采用U盘管控软件&#xff0c;禁止员工使用U盘拷…

内容自动化的进阶之路:Kompas.ai带你走进智能创作时代

在数字化媒体的浪潮中&#xff0c;内容创作和管理正变得越来越复杂和挑战性。为了应对这一挑战&#xff0c;内容自动化技术应运而生&#xff0c;它通过使用人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;算法&#xff0c;自动化内容创作的多个环节&a…

ubuntu安装mysql本地navicat连接使用

ubuntu安装mysql&#xff0c;选择在线安装非常快&#xff1a; 安装 sudo apt install -y mysql-server-8.0先下载资源&#xff08;指定版本下载&#xff09; 如果下不下来&#xff0c;遇到报错多半是 工具需要更新了 sudo apt update更新一下即可&#xff08;sudo就是权限更…

静态分析-RIPS-源码解析记录-02

这部分主要分析scanner.php的逻辑&#xff0c;在token流重构完成后&#xff0c;此时ini_get是否包含auto_prepend_file或者auto_append_file 取出的文件路径将和tokens数组结合&#xff0c;每一个文件都为一个包含require文件名的token数组 接着回到main.php中&#xff0c;此时…

【Linux网络编程】4.TCP协议、select多路IO转换

目录 TCP协议 TCP通讯时序 三次握手 四次挥手 滑动窗口 测试代码1 测试结果 Address already in use解决方法 批量杀进程 测试代码2 测试结果 测试代码4 测试结果 TCP状态转换 主动发起连接请求端 主动关闭连接请求端 被动接收连接请求端 被动关闭连接请求端…

使用Docker安装MySQL5.7.36

拉取镜像并查看 docker pull mysql:5.7.36拉取成功后查看&#xff08;非必须&#xff09; docker images创建并设置宿主机 mysql 配置文件目录和数据文件目录 创建相关文件夹将容器中的mysql数据保存到本地&#xff0c;这样即使容器被删除&#xff0c;数据也不会丢失。 mkd…

【微积分听课笔记】全微分,二元极值,Double Integral

6.6 二元函数的极值_哔哩哔哩_bilibili 此笔记为听课笔记&#xff0c;宋浩老师微积分~ 最近诸事缠身&#xff0c;会有种会不会只做一件事好些。实际上&#xff0c;关键在于动力&#xff0c;我不可能每次都准备充分。动力&#xff0c;分配&#xff0c;这是目前进入大学我正在学…

中仕公考:2024年甘肃兰州事业单位招聘公告

兰州市7个县区和市属48家事业单位计划面向社会公开招聘工作人员536名(管理岗位82名&#xff0c;专业技术岗位447名&#xff0c;工勤技能岗位7名)。 应聘人员年龄要求18周岁以上(2006年5月7日以前出生) 报名&#xff1a;2024年5月11日至5月15日(上午9:00至下午17:00) 资格审查…

第9章 负载均衡集群日常维护

一个设计良好的高可用负载均衡集群&#xff0c;交付使用以后并不能一劳永逸。欲使其高效、稳定、持续对外服务&#xff0c;日常维护必不可少。 对于高可用负载均衡集群来说&#xff0c;有两种类型的维护形式&#xff1a;常规性维护与突发性维护。突发性维护一般指故障处理&…

【每日刷题】Day34

【每日刷题】Day34 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 1047. 删除字符串中的所有相邻重复项 - 力扣&#xff08;LeetCode&#xff09; 2. 1475. 商品折扣后…

俄罗斯副总理暗示欧佩克+或增加原油产量,亚洲早盘油价小幅下跌

在俄罗斯副总理亚历山大诺瓦克暗示欧佩克可能采取行动增加原油产量后&#xff0c;亚洲早盘的油价出现小幅下跌。这一消息引起了市场对原油供给增加的担忧&#xff0c;导致油价走低。 City Index和FOREX.com的市场分析师Fawad Razaqzada表示&#xff0c;虽然原油价格在技术上尚…

JAVA(三)常用类和API

目录 常用类与基础API---String String的内存结构 构造器和常用方法 字符串构建 String与其他结构间的转换 String的常用API 系列1&#xff1a;常用方法 系列2&#xff1a;查找 系列3&#xff1a;字符串截取 系列4&#xff1a;和字符/字符数组相关 系列5&#xff1a;开头…

vitis 2020.1 Up date XSA文件后,编译不通过

原来是可以编译通过的&#xff0c;升级XSA文件后&#xff0c;出现各种问题&#xff0c;pmufw没法编译通过 xpfw_config.h:14:10: fatal error: xparameters.h: No such file or directory Vitis 2020.2 - fatal error: xparameters.h: No such file or directory (xilinx.com)…

vscode与git下载安装

粉丝不过W git下载地址: https://git-scm.com/downloads, 安装git时, 记住你安装Git的路径 vscode下载地址: https://code.visualstudio.com/ 下载完后, 并默认安装好, 你就可以进入配置git的环境变量了, 点击win, 点击设置 在搜索框里搜索, 高级系统设置 点到 高级 , 然后点击…

打造文旅客运标杆!吐鲁番国宾旅汽携苏州金龙升级国宾级出行体验

新疆&#xff0c;这片神秘的大地&#xff0c;从无垠沙漠到高耸天山&#xff0c;从古老丝路到繁华都市&#xff0c;处处都散发着独特的魅力&#xff0c;吸引着四面八方的游客。据新疆维吾尔自治区文化和旅游厅数据显示&#xff0c;刚刚过去的“五一”小长假&#xff0c;新疆全区…