流及其相关操作

简介: 流及其相关操作

概念说明

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

流的分类

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

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

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

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

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

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

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

 节点流:可以从一个特定的数据源(节点)读写数据,如文件,内存

ecaea9f2d0354bfd8371d7fde593e17b.png

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

b8ae4015eb5a40eebb6e6c3f940f55ce.png


提供服务

过滤操作(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());

总结

流是一个序列化的数据集合,它可以通过一系列的操作来进行转换和处理。

流的操作可以分为中间操作和终端操作。中间操作用于转换和处理数据,终端操作用于输出结果。

流的操作是惰性求值的,只有在终端操作被调用时才会执行。

流的操作可以链式调用,形成一个流水线,每个操作都会返回一个新的流,可以继续进行下一步操作。

升华

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


相关文章
|
7月前
|
存储 C++ iOS开发
C++ 文件和流
C++ 文件和流
56 0
|
Linux
44 # 流的原理
44 # 流的原理
66 0
java流是指在Java中用来读写数据的一组有序的数据序列,它可以将数据从一个地方带到另一个地方。java流分为输入流和输出流,输入流是从源读取数据的流,而输出流是将数据写入到目的地的流。Java流又可以分为字节流和字符流,字节流读取的最小单位是一个字节(1byte=8bit),而字符流一次可以读取一个字符(1char = 2byte = 16bit)。Java流还可以分为节点流和处理流,节点流是直接从一个源读写数据的流(这个流没有经过包装和修饰),处理流是在对节点流封装的基础上的一种流。
129 0
|
7月前
|
程序员 C++ iOS开发
c++文件和流
c++文件和流
42 0
47 # 实现可读流
47 # 实现可读流
44 0
|
SQL JavaScript 前端开发
开始使用流
Java 8 中的 Stream 俗称为流,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念 Stream 用于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作 Stream API 借助于 Lambda 表达式,极大的提高编程效率和程序可读性 同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势 通过下面的例子我们可以初步体会到使用 Stream 处理集合的便利性
56 1
I/O流
IO流:I的全称是Input,O的全称是Output。表示读取,流可以看做是程序传输数据的通道。 作用:解决程序请求资源,输出资源的问题。
60 0
|
Java 数据库
I/O 流总结
I/O 流总结
98 0