Java8流是什么?有哪些常用操作?

简介: Java8流是什么?有哪些常用操作?

Java 8 已经推出八年多了,2014 年发布的许多功能已经延续到 2022 年,其中最突出的功能之一是 Java 流。本文我将介绍什么是 Java 流,何时使用它们,流问题怎么解决,并简要介绍常见的 Java 流操作。

什么是是 Java 中的流?

Java 流支持对元素流进行函数式操作,流是按某种顺序应用于数据的不可变函数集合的抽象,流不是可以存储元素的集合。

流和结构之间最重要的区别是流不保存数据,例如,您不能指向流中存在特定元素的位置,您只能指定对该数据进行操作的函数,并且在对一个流进行操作时,会影响到原来的流。

请注意,不要将本文中的流与 Java I/O 包中的流(如 InputStream、OutputStream 等)混淆。

何时使用 Java 流

Java 流表示数据流经的管道以及对数据进行操作的函数,此实例中的管道由流源、后跟零个或多个中间操作和终端操作组成。

因此,流可用于任何数量的涉及数据驱动功能的应用程序。

Java流的特点

  • 流不是数据结构,而是从集合、数组或 I/O 通道获取输入。
  • 流不改变原始数据结构,它们只根据流水线方法提供结果。
  • 每个中间操作都被延迟执行并返回一个流作为结果,因此可以流水线化各种中间操作。终端操作标记流的结尾并返回结果。

流上的不同操作

中间操作:

  • map: map 方法用于返回一个流,该流由将给定函数应用于此流的元素的结果组成。
  • filter: filter 方法用于根据作为参数传递的 Predicate 选择元素。
  • sorted: sorted方法用于对流进行排序。

末端操作:

  • collect: collect 方法用于返回对流执行的中间操作的结果。
  • forEach: forEach 方法用于遍历流中的每个元素。
  • reduce: reduce 方法用于将流的元素减少为单个值。

代码示例

1、过滤

  • 用于根据条件从 Collection 中删除值。
  • filter()方法用于根据条件过滤 Collection 的元素。只保留匹配的元素。

过滤出所有奇数:

List<Integer> nums = numList.stream()
        .filter(n -> n % 2 != 0)
        .collect(Collectors.toList());

2、预处理

  • 集合中的每个值都需要就地更改时很有用。
  • map()方法用于将函数应用于 Collection 的每个元素并返回计算值的新 Collection。

将数字加1:

List<Integer> newNums = nums.stream()
        .map(n -> n + 1)
        .collect(Collectors.toList());

3、排序

  • 对 Collection 的元素进行排序。
  • sorted()方法用于对 Collection 的元素进行排序。

通常,Collections.sort() 足以对集合进行排序。如果我们想在它后面进行另一个操作,我们可以专门使用 sorted() 。

List<Integer> newNums = nums.stream()
        .sorted()
        .collect(Collectors.toList());
目录
相关文章
|
Java API 数据处理
java8-stream 常用操作
java 8 stream 流的操作总是记不住,每次都忘,需要每次百度,这次索性都记录下来,并将常用的网站也放在这里,已供以后学习工作使用
61 0
|
8月前
|
Java 计算机视觉 Spring
Java 文件常用操作与流转换
Java 文件常用操作与流转换
|
7月前
|
自然语言处理 Java
Java IO流进阶教程:掌握字节流和字符流的高级用法!
【6月更文挑战第26天】Java IO流助你高效交换数据,包括字节流(InputStream/OutputStream)和字符流(Reader/Writer)的高级技巧。缓冲流(Buffered*)提升读写性能,对象流(Object*Stream)支持对象序列化。字符流的BufferedReader/BufferedWriter优化文本处理,注意字符集如UTF-8用于编码转换。掌握这些,优化IO操作,提升代码质量。
60 0
|
8月前
|
Java
Java I/O流知识点总结分享
Java I/O流涵盖字节流、字符流、文件流和对象流,如InputStream/OutputStream(字节流基础)和Reader/Writer(字符流基础)。FileInputStream/FileOutputStream处理文件读写,Buffered*流提升效率。Reader/Writer的缓冲版本是BufferedReader/BufferedWriter,InputStreamReader/OutputStreamWriter负责流之间的转换。
28 1
java202303java学习笔记第三十七天转换流基本用法1
java202303java学习笔记第三十七天转换流基本用法1
46 0
java202303java学习笔记第三十七天转换流基本用法2
java202303java学习笔记第三十七天转换流基本用法2
46 0
java学会这些,我就入门啦!(基础篇五)流与IO流
java学会这些,我就入门啦!(基础篇五)流与IO流
|
Java API
Java中IO流的理解与简单使用(三)
Java中IO流的理解与简单使用(三)
116 0
|
存储 Java Unix
Java中IO流的理解与简单使用(一)
Java中IO流的理解与简单使用(一)
63 0
|
Java
Java中IO流的理解与简单使用(二)
Java中IO流的理解与简单使用(二)
76 0

相关实验场景

更多