Java函数式编程【三】【Stream终止操作】【上】之【简单约简】

news/2024/12/17 23:29:33/

函数式编程可分为三个步骤:流的创建、流的中间操作和流的终止操作。其中流的中间操作可以有n个,而流的终止操作只能有一个。

函数式编程三个步骤示意图:
在这里插入图片描述

常用的终止操作

Stream的终止操作大致可分为两大类:简单约简的终止操作和复杂终止操作。

(一)、八个常用的简单约简终止操作

  • allMatch、anyMatch、noneMatch 匹配操作,数据流中是否存在符合条件的元素 返回值为boolean值。
  • count 统计操作,统计最终的数据个数。
  • findFirst、findAny 查找操作,查找第一个、查找任何一个 返回的类型为Optional。
  • min、max 最值操作,需要自定义比较器,返回数据流中最大最小的值。

简单约简的返回结果是要么是boolean,要么是Optional类型。

(二)、复杂的终止操作

  • forEach、forEachOrdered 遍历操作,这两个操作都是对Stream中的数据元素进行消费操作。
  • collect 收集操作,将所有数据收集起来,这个操作非常重要,官方的提供的Collectors 提供了非常多收集器,可以说终止操作collect是Stream的终极大杀器。
  • reduce 归约操作,将整个Stream中的数据元素归约为一个值,例如:count、min、max底层就是使用reduce实现的。
  • toArray 数组操作,将Stream中的数据元素存放到数组中。

终止操作的使用示例

1,匹配操作(allMatch、anyMatch、noneMatch)Stream也支持类似集合匹配元素的操作,匹配返回的结果是boolean类型。
anyMatch(Predicate), allMatch(Predicate), 和 noneMatch(Predicate): 检查流中是否有符合给定条件的元素、是否所有元素都符合条件、是否没有元素符合条件。

List<Integer> list = Arrays.asList(7, 6, 9, 3, 2, 15);
boolean anyMatch = list.stream().anyMatch(x -> x < 6);
boolean allMatch = list.stream().allMatch(x -> x < 6);
boolean noneMatch = list.stream().noneMatch(x -> x < 6);

2,统计操作 count(): 统计流中元素的数量。

	long count = Stream.of("Alice", "Bob", "Charlie").count();

3,计算最大和最小值:max(Comparator) 和 min(Comparator): 根据比较器返回流中的最大或最小元素。

在这里插入图片描述

		Optional<String> maxName = Stream.of("Alice", "Bob", "Charlie").max(Comparator.naturalOrder());System.out.println("最长的名字:" + maxName.get());List<String> sList = Arrays.asList("World", "me", "you");Optional<String> min = sList.stream().min(Comparator.comparing(String::length));System.out.println("最短的字符串:" + min.get());Optional<String> max = sList.stream().max(Comparator.comparing(String::length));System.out.println("最长的字符串:" + max.get());

4,查找操作:(findFirst/findAny)查找第一个、查找任何一个 返回的类型为Optional。

        List<Integer> list = Arrays.asList(7, 6, 9, 3, 2, 15);// 匹配第一个Optional<Integer> findFirst = list.stream().filter(x -> x > 6).findFirst();// 匹配任意(适用于并行流)Optional<Integer> findAny = list.parallelStream().filter(x -> x > 6).findAny();System.out.println("匹配第一个值:" + findFirst.get());System.out.println("匹配任意一个值:" + findAny.get());  

5,遍历操作( forEach)

终止操作 forEach的方法签名(原型),它的输入参数是一个类型为消费者接口的函数接口:

	void java.util.stream.Stream.forEach(Consumer<? super Integer> action)

下面是一个查找操作和遍历操作的示例:

        List<Integer> list = Arrays.asList(7, 6, 9, 3, 2, 15);// 遍历输出符合条件的元素list.stream().filter(x -> x > 6).forEach(System.out::println);

参考文献:

  • Java8 Stream:2万字20个实例,玩转集合的筛选、归约、分组、聚合-CSDN
  • 1.Java Stream 流操作

http://www.ppmy.cn/news/1555980.html

相关文章

<数据集>输电线塔杂物识别数据集<目标检测>

数据集下载链接 &#xff1c;数据集&#xff1e;输电线塔杂物识别数据集&#xff1c;目标检测&#xff1e;https://download.csdn.net/download/qq_53332949/90141102数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;1099张 标注数量(xml文件个数)&#xff1a;1099 …

11.python文件

文章目录 Python 文件 I/O 总结1. **打印到屏幕**2. **读取键盘输入**3. **打开和关闭文件**3.1 open() 函数3.2 close() 方法 4. **文件读写操作**4.1 write() 方法4.2 read() 方法4.3 readline() 方法4.4 readlines() 方法4.5 seek() 和 tell() 方法 5. **文件重命名和删除**…

RabbitMQ全局流量控制

RabbitMQ全局流量控制 流控机制流控是对什么进行控制&#xff1f;rabbitmq进程邮箱流控机制是什么&#xff1f; 流控原理流控原理流程 流控状态显示流控对象流控机制对象主要进程各进程状态情形分析 性能提升提升队列性能方式 当消息积压时&#xff0c;消息会进入到队列深处&am…

中国计算机学会计算机视觉专委会携手合合信息举办企业交流活动,为AI安全治理打开“新思路”

近期&#xff0c;《咬文嚼字》杂志发布了2024年度十大流行语&#xff0c;“智能向善”位列其中&#xff0c;过去一年时间里&#xff0c;深度伪造、AI诈骗等话题屡次登上热搜&#xff0c;AI技术“野蛮生长”引发公众担忧。今年9月&#xff0c;全国网络安全标准化技术委员会发布了…

鸿蒙Next环境设备查询Environment用法总结

一、概述 Environment是ArkUI框架在应用程序启动时创建的单例对象&#xff0c;用于提供一系列描述应用程序运行状态的属性&#xff0c;其所有属性不可变&#xff08;应用不可写入&#xff09;且为简单类型&#xff0c;主要为AppStorage提供设备环境相关信息&#xff0c;以辅助…

APP、小程序对接聚合广告平台,有哪些广告变现策略?

开发者对接聚合广告平台&#xff0c;可以让自身流量价值最大化&#xff0c;获得更多的广告曝光机会&#xff0c;对接单一的广告联盟容易造成广告填充不足&#xff0c;收益不稳定的问题。#APP广告变现# APP开发者根据应用的生命周期、用户特征和产品定位&#xff0c;选择最适合…

《Time Ghost》的制作:利用AI模型,实现更具真实感的布料变形

在 2024 年 9 月&#xff0c;Unity 的 Demo 团队展示了一个全新的实时电影级 demo 《Time Ghost》。这个 demo 是基于 Unity 6 引擎制作的&#xff0c;采用了 Unity 6 中的一些新功能和技术能力&#xff0c;让我们能够实现前所未有的视觉品质和复杂程度。 在制作《Time Ghost》…

mac 安装CosyVoice (cpu版本)

CosyVoice 介绍 CosyVoice 是阿里研发的一个tts大模型 官方项目地址&#xff1a;https://github.com/FunAudioLLM/CosyVoice.git 下载项目&#xff08;非官方&#xff09; git clone --recursive https://github.com/v3ucn/CosyVoice_for_MacOs.git 进入项目 cd CosyVoic…