Java之Stream类

1.介绍

(1)Stream流
配合Lambda表达式,简化集合和数组的操作
(2)Stream流思想
流水线思想

2.获取Stream流对象

(1)集合获取流Stream流对象
使用Collection接口中的默认方法Stream<T> stream()
注:单值集合可以直接获取Stream流对象,键值对象是间接获取Stream流对象

        //单值集合获取Stream流对象List<String> list = new ArrayList<String>();list.add("a");list.add("b");list.stream().forEach(s -> System.out.println(s));//键值集合获取Stream流对象Map<String, String> map = new HashMap<>();map.put("a", "1");map.put("b", "2");map.keySet().stream().forEach(s -> System.out.println(s));map.values().stream().forEach(s -> System.out.println(s));map.entrySet().stream().forEach(s -> System.out.println(s));

(2)数组获取Stream流对象
使用Arrays数组工具类中的静态方法Stream<T> stream(T[] array)

   		int[] arr = new int[]{1, 2, 3, 4, 5};Arrays.stream(arr).forEach(s -> System.out.println(s));

(3)零散的数据获取Stream流对象
使用Stream类中的静态方法Stream<T> of(T… values)

		Stream.of("a", "b", 9, "d", 3).forEach(s -> System.out.println(s));

3.Stream流中间操作方法

注:流对象已经被使用过,就不允许再次使用了;Stream流操作,不会修改源数据
(1)Stream<T> filter(Predicate<? super T> predicate)
用于对流中的数据进行过滤

		//打印集合中以"张"开头的字符串ArrayList<String> list = new ArrayList<>();list.add("王一");list.add("张二");list.add("张三");list.add("李四");list.stream().filter(s -> s.startsWith("张")).forEach(s -> System.out.println(s));

(2)Stream<T> limit(long maxSize)
获取前几个元素

		list.stream().limit(3).forEach(s -> System.out.println(s));

(3)Stream<T> skip(long n)
跳过前几个元素

		list.stream().skip(2).forEach(s -> System.out.println(s));

(4)Stream<T> distinct()
去除流中重复的元素(依赖hashCode和equals方法)

 		Stream<? extends Serializable> stream = Stream.of("s", "s", 3, "d", 3);stream.distinct().forEach(s -> System.out.println(s));

(5)Stream<T> concat(Stream a,Stream b)
合并a和b两个流为一个流

   		Stream<Integer> stream1 = Stream.of(1, 2, 3, 4, 5);Stream<? extends Serializable> stream2 = Stream.of("s", "s", 9, "d", 3);Stream.concat(stream1, stream2).forEach(s -> System.out.println(s));

4.终结方法

(1)void forEach(Consumer action)
对此流的每个元素执行遍历操作

(2)long count()
返回此流中的元素数

5.Stream流的收集操作

(1)R collect(Collector collector)
开始收集Stream流,指定收集器,把Stream流操作后的结果数据转回到集合

(2)Collectors工具类提供了具体的收集方式

  • Collector <T> toList() 把元素收集到List集合中
	     Stream<String> sa = Stream.of("sa", "sc", "sd", "d");List<String> list = sa.filter(s -> s.startsWith("s")).collect(Collectors.toList());
  • Collector <T> toSet() 把元素收集到Set集合中
		Stream<String> sa = Stream.of("sa", "sc", "sd", "d");Set<String> set = sa.filter(s -> s.startsWith("s")).collect(Collectors.toSet());
  • Collector toMap(Function keyMapper,Function valueMapper) 把元素收集到Map集合中
ArrayList<String> list = new ArrayList<>();list.add("张三,23");list.add("李四,24");list.add("王五,25");list.add("赵六,26");list.stream().filter(s -> Integer.parseInt(s.split(",")[1]) > 24).collect(Collectors.toMap(s-> s.split(",")[0], s -> s.split(",")[1])).forEach((k, v) -> System.out.println(k + " " + v));

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

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

相关文章

Python学习之路-综合练习:学生管理系统

Python学习之路-综合练习:学生管理系统 目前已经学习了变量、流程控制、函数、模块&#xff0c;可以利用已学习的知识开发一个学生管理系统 项目需求 系统有首页介绍页面与功能菜单系统功能由查询、显示、修改与删除功能可以使用数字选择不同的功能学生信息需要记录&#xf…

Trans论文复现:基于数据驱动的新能源充电站两阶段规划方法程序代码!

适用平台&#xff1a;MatlabYalmipCplex/Gurobi&#xff1b; 文章提出了一种电动汽车充电站的两阶段规划方法&#xff0c;第一阶段通过蒙特卡洛法模拟充电车辆需求和电池充放电数据来确定充电站位置&#xff1b;第二阶段通过数据驱动的分布鲁棒优化方法优化充电站的新能源和电池…

【惠友骨科小课堂】拇外翻常见的几个误区,来看看你中了几个?

拇外翻作为常见的足部畸形&#xff0c;在日常生活中困扰着许多人。歪脚趾不仅外观不好看&#xff0c;还会出现疼痛、影响行走运动。但大多数人对于拇外翻的认识都不足常常落入认知误区&#xff0c;快来看看你中了几个&#xff1f; 误区一Q 我都没穿过高跟鞋&#xff0c;怎么也…

爬虫实战丨基于requests爬取比特币信息并绘制价格走势图

文章目录 写在前面实验环境实验描述实验内容 写在后面 写在前面 本期内容&#xff1a;基于requests爬取比特币信息并绘制价格走势图 下载地址&#xff1a;https://download.csdn.net/download/m0_68111267/88734451 实验环境 anaconda丨pycharmpython3.11.4requests 安装r…

MySQL夯实之路-查询性能优化深入浅出

MySQL调优分析 explain&#xff1b;show status查看服务器状态信息 优化 减少子任务&#xff0c;减少子任务执行次数&#xff0c;减少子任务执行时间&#xff08;优&#xff0c;少&#xff0c;快&#xff09; 查询优化分析方法 1&#xff0e;访问了太多的行和列&#xff1…

pytorch学习笔记(十)

一、损失函数 举个例子 比如说根据Loss提供的信息知道&#xff0c;解答题太弱了&#xff0c;需要多训练训练这个模块。 Loss作用&#xff1a;1.算实际输出和目标之间的差距 2.为我们更新输出提供一定的依据&#xff08;反向传播&#xff09; 看官方文档 每个输入输出相减取…

数据库-列的类型-字符串char类型

char 和 varchar 类型 char 类型懂得都懂就是固定的字符串类型 char (maxLen) 例如 char(5) 这个长度为5 但插入数据‘a’时 是5 插入abc 也是5 即使插满固定 就像C/C语言里 char 字符数组一样 char str[64]; maxLen255 哈哈最多有255个字符多了我认为你是错误 varchar…

C++(9)——内存管理

1. 内存分类&#xff1a; 在前面的文章中&#xff0c;通常会涉及到几个名词&#xff0c;例如&#xff1a;栈、堆。这两个词所代表的便是计算机内存的一部分 。在计算机中&#xff0c;对系统的内存按照不同的使用需求进行了区分&#xff0c;大致可以分为&#xff1a;栈 、堆、数…

Pandas实战100例 | 案例 30: 应用自定义函数

案例 30: 应用自定义函数 知识点讲解 在数据处理过程中&#xff0c;有时需要对数据应用特定的逻辑&#xff0c;这时可以使用自定义函数。Pandas 的 apply 方法允许你对 DataFrame 的行或列应用一个自定义函数。 自定义函数: 你可以定义一个 Python 函数&#xff0c;该函数可…

Debezium发布历史63

原文地址&#xff1a; https://debezium.io/blog/2019/07/08/tutorial-sentry-debezium-container-images/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. 将 Sentry 添加到 Debezium 容器镜像的教程 2019 年 7…

安卓11菜单实现hdmi-4K动态切换

客户要求系统实现动态hdmi-4K与普通分辨率直接热切换&#xff0c;先在菜单中做个试验&#xff0c;设置中加个切换开关&#xff0c;点击开关就可以直接切到hdmi-4K&#xff0c;这个功能实现后可以通过插拔hdmi那个状态&#xff08;sys/class/drm/card0-HDMI-A-1/status&#xff…

41k+ stars 闪电般快速的开源搜索引擎 docker安装教程

目录 1.下载 2.启动 成功示例 3.创建索引 4.插入数据 4.1下载数据 4.2插入数据 4.3查看数据 5.官方地址 1.下载 docker pull getmeili/meilisearch:latest 2.启动 mkdir -p /opt/meili_datadocker run -it --rm \-p 7700:7700 \-v /opt/meili_data:/meili_data \ge…

YOLOV7剪枝流程

YOLOV7剪枝流程 1、训练 1&#xff09;划分数据集进行训练前的准备&#xff0c;按正常的划分流程即可 2&#xff09;修改train.py文件 第一次处在参数列表里添加剪枝的参数&#xff0c;正常训练时设置为False&#xff0c;剪枝后微调时设置为True parser.add_argument(--pr…

2401d,讨论d串滑动参数

原文 因为对编译时执行的i串的兴趣,我一直在考虑搞个通用用例,而不是相关i串的用例. 滑动模板参数 请考虑以下模板: void pluto(string s)() {pragma(msg, s); } void test() {pluto!"hello"(); }因为s是编译时参数,这编译,而pragma(msg,s) 期望s为编译时值. voi…

Linux第28步_编译“正点原子的TF-A源码”

编译“正点原子的TF-A源码”&#xff0c;目的是想得到TF-A文件&#xff0c;即“tf-a-stm32mp157d-atk-trusted.stm32”。 在前27步的基础上&#xff0c;才可以学习本节内容&#xff0c;学习步骤如下&#xff1a; 1、创建“alientek_tf-a”目录&#xff1b; 2、复制正点原子的…

.【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)

概率图模型是一种用图形表示概率分布和条件依赖关系的数学模型。概率图模型可以分为两大类&#xff1a;有向图模型和无向图模型。有向图模型也叫贝叶斯网络&#xff0c;它用有向无环图表示变量之间的因果关系。无向图模型也叫马尔可夫网络&#xff0c;它用无向图表示变量之间的…

02.部署LVS-DR群集

技能展示&#xff1a; 了解LVS-DR群集的工作原理 会构建LVS-DR负载均衡群集 2.1 LVS-DR 集群 LVS-DR&#xff08; Linux Virtual Server Director Server &#xff09;工作模式&#xff0c;是生产环境中最常用的一种工作模式。 2.1.1&#xff0e;LVS-DR 工作原理 LVS-DR 模式&…

在root账号下启动 elasticsearch

最新版本的 elasticsearch 不能用root账号运行&#xff0c;但是每次启动都要切换到其他账号下面&#xff0c;也是一件很麻烦的事情。下面写个脚本&#xff0c;以指定用户运行elasticsearch 假设服务器已经装好了elasticsearch&#xff0c;并且在 /usr/local/elasticsearch-8.1…

Spark---RDD持久化

文章目录 1.RDD持久化1.1 RDD Cache 缓存1.2 RDD CheckPoint 检查点1.3 缓存和检查点区别 1.RDD持久化 在Spark中&#xff0c;持久化是将RDD存储在内存中&#xff0c;以便在多次计算之间重复使用。这可以显著减少不必要的计算&#xff0c;提高Spark应用程序的性能。 val line…

蓝桥杯练习题(七)

&#x1f4d1;前言 本文主要是【算法】——蓝桥杯练习题&#xff08;七&#xff09;的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 …