流及其相关操作
  0igIJDzjah01 2023年11月02日 169 0


本文已收录于专栏 《Java》



目录

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


概念说明

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

流的分类

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

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

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

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

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

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

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

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


流及其相关操作_输出流

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

流及其相关操作_List_02

提供服务

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

总结

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

升华

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



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



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  ehrZuhofWJiC   2024年04月26日   42   0   0 日志Java
0igIJDzjah01