流及其相关操作

news2024/9/20 22:27:09
本文已收录于专栏
《Java》

目录

  • 概念说明
  • 流的分类
    • 根据数据流向的不同,可以分为输入流和输出流。
    • 根据处理单位的不同,可以分为字节流和字符流。
    • 根据功能不同,可以分为节点流和处理流。
  • 提供服务
    • 过滤操作(Filter)
    • 映射操作(Map)
    • 排序操作(Sorted)
    • 聚合操作(Reduce)
    • 收集操作(Collect)
  • 总结
  • 升华

概念说明

  在编程中是一种抽象的概念,就好比“水流”,从一段流向另一端。在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成。程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件。

流的分类

根据数据流向的不同,可以分为输入流和输出流。

  输入流:就是把数据(键盘输入、鼠标、扫描仪等等外设设备)读入到内存(程序)中。所有输入流类都是 InputStream 抽象类(字节输入流)和 Reader 抽象类(字符输入流)的子类。

  输出流:输出流就是把内存(程序)中的数据输出到外设或其他地方。所有输出流类都是 OutputStream 抽象类(字节输出流)和 Writer 抽象类(字符输出流)的子类。

根据处理单位的不同,可以分为字节流和字符流。

  字节流:Java中的字节流处理的最基本单位为单个字节,它通常用来处理二进制数据。Java中最基本的两个字节流类是InputStream和OutputStream,它们分别代表了组基本的输入字节流和输出字节流。

  字符流:Java中的字符流处理的最基本的单元是Unicode码元(大小2字节),它通常用来处理文本数据。所谓Unicode码元,也就是一个Unicode代码单元,范围是0x0000~0xFFFF。在以上范围内的每个数字都与一个字符相对应,Java中的String类型默认就把字符以Unicode规则编码而后存储在内存中。

根据功能不同,可以分为节点流和处理流。

  节点流:可以从一个特定的数据源(节点)读写数据,如文件,内存
​​​​在这里插入图片描述

  处理流:是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更强大的读写功能。
在这里插入图片描述

提供服务

过滤操作(Filter)

  通过过滤操作可以从集合中筛选出满足指定条件的元素。例如,从一个整数集合中筛选出大于10的元素:


List<Integer> numbers = Arrays.asList(1, 5, 10, 15, 20);
List<Integer> filteredNumbers = numbers.stream()
                                        .filter(n -> n > 10)
                                        .collect(Collectors.toList());

映射操作(Map)

  通过映射操作可以将集合中的每个元素映射为另一个元素。例如,将一个字符串集合中的每个字符串转换为大写形式:

List<String> words = Arrays.asList("hello", "world", "java");
List<String> upperCaseWords = words.stream()
                                   .map(String::toUpperCase)
                                   .collect(Collectors.toList());

排序操作(Sorted)

  通过排序操作可以对集合中的元素进行排序。例如,对一个整数集合进行升序排序:

List<Integer> numbers = Arrays.asList(5, 2, 8, 1, 10);
List<Integer> sortedNumbers = numbers.stream()
                                      .sorted()
                                      .collect(Collectors.toList());

聚合操作(Reduce)

  通过聚合操作可以将集合中的元素进行合并或计算。例如,计算一个整数集合的总和:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
                 .reduce(0, Integer::sum);

收集操作(Collect)

  通过收集操作可以将流中的元素收集到一个集合中。例如,将一个字符串流收集到一个字符串列表中:

Stream<String> stream = Stream.of("hello", "world", "java");
List<String> words = stream.collect(Collectors.toList());

总结

  • 流是一个序列化的数据集合,它可以通过一系列的操作来进行转换和处理。
  • 流的操作可以分为中间操作和终端操作。中间操作用于转换和处理数据,终端操作用于输出结果。
  • 流的操作是惰性求值的,只有在终端操作被调用时才会执行。
  • 流的操作可以链式调用,形成一个流水线,每个操作都会返回一个新的流,可以继续进行下一步操作。

升华

  流提供了一种更简洁、更灵活的方式来处理集合数据,可以大大简化代码的编写,提高代码的可读性和可维护性。在实际开发中,根据具体的需求选择合适的流操作可以提高代码的效率和性能。


🎯 此文章对你有用的话记得留言+点赞+收藏哦🎯

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

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

相关文章

后端基础:IO cell的pre driver与post driver的区别

pre driver就是接core电压的部分&#xff0c;一般叫VDD/VSS&#xff0c;post driver就是接pad的高压部分。所以power IO起到一个level shifter的作用&#xff0c;将高压转换为低压。 pre driver和post driver地共用的情况可以节省一个PAD&#xff0c;esd也很好&#xff0c;但是…

华为IMC培训——通信基础与路由协议

目录 环境搭建 wireshark安装 VirtualBox安装 WinPcap安装 eNSP安装 数据在七层模型间的传输过程 路由 静态路由 动态路由 rip OSPF 单臂路由 ——————————————————————————————————————————— 虽然是白嫖的课&#xff…

使用cmake创建visual studio工程

对于从网上拉取的C++代码,手动配置VS环境比较麻烦,使用cmake可以自动配置,这里使用一个简单的cmake配置hello.cpp例子演示 前提环境:cmake vs2017 1.在某路径下创建一个文件夹名为test:(注意:路径中不能有中文) 其中CMakeList.txt文件中输入代码如下: 其中,cmake_…

supervisor管理

supervisor 一&#xff1a;supervisor使用详解 一&#xff1a;supervisor使用详解 简介 使用文档&#xff1a;http://supervisord.org/ supervisor是Python开发的c/s服务&#xff0c;是Linux系统下的进程管理工具。 可以监听、启动、停止、重启一个或多个进程 用supervisor…

【SLAM学习】获取IMU和雷达消息并发布

本文主要记录如何将rosbag的消息进行获取并进行发布以及后续处理。 测试数据集&#xff1a; 链接: https://pan.baidu.com/s/1DthWE45V5Zhq7UUrfTt_CQ 提取码: mxvn 查看数据集bag包里面都有那些话题&#xff1a; rosbag info indoor_lab_RS.bag 可以看到包含了两个话题…

web安全php基础_php语法格式与注释

php开头与结尾 php脚本以<php 开始 以 ?>结束 但是先前创建页面的时候我们发现phpinfo只有<php开头&#xff0c;并没有&#xff1f;>结尾 在这里我们可以手动给它加上?>结尾 php强制使用分号&#xff1b;结尾 PHP指令分隔符   与C、Perl及Java一样&…

mysql的集群和主从的区别

现在的项目使用mysql数据库&#xff0c;要自己设计数据存储架构。所以研究了一下mysql的集群(cluster)和主从&#xff08;master/slave&#xff09;这两个概念。两者非常容易混淆&#xff0c;所以需要分辨出这2者之间的区别。 一、Mysql cluster: share-nothing,分布式节点架构…

综合实验---基于卷积神经网络的目标分类案例

文章目录 配置环境猫狗数据分类建模猫狗分类的实例基准模型猫狗分类的实例基准模型之数据增强问题回答 配置环境 ①首先打开 cmd&#xff0c;创建虚拟环境。 conda create -n tf1 python3.6如果报错&#xff1a;‘conda’ 不是内部或外部命令,也不是可运行的程序 或批处理文件…

Docker镜像是什么原理?Dockerfile是什么?

Dockerfile 一、docker镜像原理 Linux文件系统有bootfs和rootfs两部分组成 bootfs&#xff1a; 包含bootloader&#xff08;引导加载程序&#xff09;和kernel&#xff08;内核&#xff09;rootfs&#xff1a; root文件系统&#xff0c;包含的就是典型Linux系统中的 /dev&…

【花雕】全国青少年机器人技术一级考试备考实操搭建手册4

目录 1、秋千 2、跷跷板 3、搅拌器 4、奇怪的钟 5、起重机 6、烤肉架 7、手摇风扇 8、履带车 9、直升机 10、后轮驱动车 钟表是一种计时的装置&#xff0c;也是计量和指示时间的精密仪器。 钟表通常是以内机的大小来区别的。按国际惯例&#xff0c;机芯直径超过80毫米、厚度超…

Axure设计之下拉复选框(中继器)

在系统表单设计中经常用到下拉复选框&#xff0c;下拉复选列表用于展示可选标签&#xff0c;并允许用户选择多个标签&#xff0c;那么该如何利用Axure RP9制作一个下拉复选框呢&#xff1f;本文总结了设计过程的所需元件和整体思路&#xff0c;通过对关键步骤的讲解&#xff0c…

Type-c取电方案

如今随着这几年的USB-C PD适配器的普及&#xff0c;消费者手上的PD协议适配器越来越普遍&#xff0c;如何让微软surface 充电器线支持使用PD适配器快充&#xff1f;加入一颗受电端PD协议取电芯片——LDR6328能够完美的兼容市面上的PD适配器&#xff0c;支持不同的电压输出。 1…

vuex 持久化插件 vuex-persistedstate

/** ** /store/index.js ****/ import Vue from vue import Vuex from vuex import createPersistedState from vuex-persistedstate // 【主要代码】Vue.use(Vuex)// https://webpack.js.org/guides/dependency-management/#requirecontext const modulesFiles require.conte…

使用alist连接百度网盘和阿里云盘挂载到本地磁盘

1、下载alist软件 使用alist连接百度网盘和阿里云盘挂载到本地磁盘 跳转后&#xff0c;找到对应windows版本 2 、下载后解压&#xff0c;并启动服务 注意&#xff1a;alist的启动方式不是传统的双击启动&#xff0c;需要用命令提示符,启动服务 下载完成后解压&#xff0c;在你解…

MySQL - 第13节 - MySQL用户管理

1.MySQL用户管理概念 MySQL用户管理概念&#xff1a; • 与Linux操作系统类似&#xff0c;MySQL中也有超级用户和普通用户之分。 • 如果一个用户只需要访问MySQL中的某一个数据库&#xff0c;甚至数据库中的某一个表&#xff0c;那么可以为其创建一个普通用户&#xff0c;并为…

HarmonyOS学习路之开发篇—设备管理(传感器开发)

传感器开发概述 基本概念 HarmonyOS传感器是应用访问底层硬件传感器的一种设备抽象概念。开发者根据传感器提供的Sensor API&#xff0c;可以查询设备上的传感器&#xff0c;订阅传感器的数据&#xff0c;并根据传感器数据定制相应的算法&#xff0c;开发各类应用&#xff0c;…

【海量数据挖掘/数据分析】之 贝叶斯信念网络(贝叶斯信念网络、有向无环图、贝叶斯公式、贝叶斯信念网络计算实例)

【海量数据挖掘/数据分析】之 贝叶斯信念网络&#xff08;贝叶斯信念网络、有向无环图、贝叶斯公式、贝叶斯信念网络计算实例&#xff09; 目录 【海量数据挖掘/数据分析】之 贝叶斯信念网络&#xff08;贝叶斯信念网络、有向无环图、贝叶斯公式、贝叶斯信念网络计算实例&…

仙剑风景图片生成【InsCode Stable Diffusion美图活动一期】

一、 Stable Diffusion 模型在线使用地址&#xff1a;https://inscode.csdn.net/inscode/Stable-Diffusion 二、模型版本及相关配置&#xff1a; Steps: 20, Sampler: Euler a, CFG scale: 7, Seed: 423016627, Size: 512x512, Model hash: 74c61c3a52, Model: GuoFeng3,…

通过摄像头监测交通——远眺智慧交通视频AI分析系统「捷码精品应用展」

随着社会经济的发展和人民生活水平的提高&#xff0c;汽车数量增长迅猛。汽车数量的迅速增加造成交通拥挤严重、交通事故频发&#xff0c;甚至愈演愈烈&#xff0c;惨不忍"堵"&#xff0c;严重影响城市交通安全与交通效率&#xff0c;如何保障人民群众安全、有序出行…

06_RBAC项目总结

RBAC项目总结 基于角色访问控制(RBAC&#xff1a;Role Based Access Control) 对于基本的增删改查 1.通过看接口文档要求这个接口使用什么方式发送请求,需要响应的数据的格式是什么 2.若请求的参数由其他对象或者数组组成的,就需要重新定义一个类来进行接收,后端接收的时候…