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

devtools/2024/9/23 2:15:22/

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方法。

java">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.ppmy.cn/devtools/39710.html

相关文章

AWS Lambda 第一个例子Hello (JAVA)

什么是Serverless&#xff08;无服务器计算&#xff09; 行业通常所说的Serverless&#xff0c;主要是指“无服务器计算&#xff08;Serverless Computing&#xff09;”。无服务器计算&#xff0c;并不是真的不需要服务器&#xff0c;而是说&#xff0c;对于用户&#xff0c;…

Vue 中 $nextTick 的作用是什么?

目录 一、NextTick是什么 为什么要有nexttick 二、使用场景 三、实现原理 一、NextTick是什么 官方对其的定义 在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法&#xff0c;获取更新后的 DOM 什么意思呢&#xff1f; 我们可以理解成&#xff0c…

瀚高数据库(HighGoDB)Windows安装使用

1.下载 2.安装 瀚高数据库下载与安装&#xff08;Windows版&#xff09;-CSDN博客 3.连接工具 4.建库、建表操作 瀚高数据库管理工具-CSDN博客 *报错Cant access non-default database&#xff0c;需要右键数据库-设为活动对象 5.导入外部数据&#xff08;迁移、对比&…

Microsoft 365 for Mac v16.84 office365全套办公软件

Microsoft 365 for Mac是一款功能丰富的办公软件套件&#xff0c;为Mac用户提供了丰富的功能和工具&#xff0c;提高了工作效率和协作能力。Microsoft 365 for Mac是一款专为Mac用户设计的订阅式办公软件套件&#xff0c;旨在提高生产力和效率。 Microsoft 365 for Mac v16.84正…

智能交通仿真平台介绍

随着城市化进程的加速和汽车不断的增加&#xff0c;交通问题日益突出。为了应对这一挑战&#xff0c;智能交通和自动驾驶技术应运而生。智能交通与自动驾驶技术的结合将改善交通安全和减少拥堵&#xff0c;智能交通系统提供实时路况信息和信号控制&#xff0c;帮助自动驾驶车辆…

超越视觉极限:深度学习图像超分辨率算法清单【第二部分】

超越视觉极限&#xff1a;深度学习图像超分辨率算法清单【第二部分】 简介2017年 - SRGAN (Super-Resolution Generative Adversarial Network)2017年 - DRRN (Deep Recursive Residual Network)2018年 - ESRGAN (Enhanced Super-Resolution Generative Adversarial Networks)2…

ICode国际青少年编程竞赛- Python-3级训练场-能量状态判断1

ICode国际青少年编程竞赛- Python-3级训练场-能量状态判断1 1、 for i in range(6):Spaceship.step(2)if not Item[i].broken():Spaceship.turnLeft()Spaceship.step(4)Spaceship.turnLeft()Spaceship.turnLeft()Spaceship.step(4)Spaceship.turnLeft()2、 for i in range(6)…

【算法基础】第六章:贪心

Chapter 6 贪心 1&#xff1a;区间选点 给定 N个闭区间 [a,b]&#xff0c;请你在数轴上 选择尽量少的点&#xff0c;使得每个区间内至少包含一个选出的点。 输出选择的点的最小数量。 位于区间端点上的点也算作区间内。 区间问题的本质就是排序 按左端点排序按右端点排序双关…