对于Java中Stream流的理解

简介: 对于Java中Stream流的理解

几乎所有的集合(如 Collection 接口或 Map 接口等)都支持直接或间接的遍历操作。而当我们需要对集合中的元

素进行操作的时候,除了必需的添加、删除、获取外,最典型的就是集合遍历

import ;">;
import ;">;
public class Demo01ForEach {
public static void main ( String [] args ) {
List <</span>String> list = new ArrayList<>();
list . add ( " 张无忌 " );
list . add ( " 周芷若 " );
list . add ( " 赵敏 " );
list . add ( " 张强 " );
list . add ( " 张三丰 " );
for ( String name : list ) {
System . out . println ( name );
}
}


正常情况下我们是如何遍历的呢(JDK1.8之前)?

import ;">;
import ;">;
public class Demo02NormalFilter {
public static void main ( String [] args ) {
List <</span>String> list = new ArrayList<>();
list . add ( " 张无忌 " );
list . add ( " 周芷若 " );
list . add ( " 赵敏 " );
list . add ( " 张强 " );
list . add ( " 张三丰 " );
List <</span>String> zhangList = new ArrayList<>();
for ( String name : list ) {
if ( name . startsWith ( " 张 " )) {
zhangList . add ( name );
}
}
List <</span>String> shortList = new ArrayList<>();
for ( String name : zhangList ) {
if ( name . length () == 3 ) {
shortList . add ( name );
}
}

但是在JDK1.8之后,出现了Stream流,遍历的方式变得更加优雅了。

比如说还是这个例子

import ;">;
public class Demo03StreamFilter {
public static void main ( String [] args ) {
List <</span>String> list = new ArrayList<>();
list . add ( " 张无忌 " );
list . add ( " 周芷若 " );
list . add ( " 赵敏 " );
list . add ( " 张强 " );
list . add ( " 张三丰 " );
list . stream ()
. filter ( s > s . startsWith ( " 张 " ))
. filter ( s > s . length () == 3 )
. forEach ( System . out :: println );
}
}


直接看代码就能知道, 获取流、过滤姓张、过滤长度为 3 、逐一打印 。代码很简洁,很直观。


stream流的特性如下

Stream流不是一种数据结构,不保存数据,它只是在原数据集上定义了一组操作。

这些操作是惰性的,即每当访问到流中的一个元素,才会在此元素上执行这一系列操作。

Stream不保存数据,故每个Stream流只能使用一次。

stream流的方法有很多中,大致分为延迟方法和终结方法。


       延迟方法 :返回值类型仍然是 Stream 接口自身类型的方法,因此支持链式调用。(除了终结方法外,其余方

法均为延迟方法。)

       终结方法 :返回值类型不再是 Stream 接口自身类型的方法,因此不再支持类似 StringBuilder 那样的链式调

用。终结方法包括 count 和 forEach 方法。


forEach的使用:

public static void main(String[] args) {
Stream <</span>String> stream = Stream.of("张无忌", "张三丰", "周芷若");
stream . forEach ( name > System . out . println ( name ));
}


fifilter方法的使用


public static void main(String[] args) {
Stream <</span>String> original = Stream.of("张无忌", "张三丰", "周芷若");
Stream <</span>String> result = original.filter(s > s.startsWith("张"));
}


count方法的使用

public static void main(String[] args) {
Stream <</span>String> original = Stream.of("张无忌", "张三丰", "周芷若");
Stream <</span>String> result = original.filter(s > s.startsWith("张"));
System . out . println ( result . count ()); // 2
}

 limit方法的使用

public static void main(String[] args) {
Stream <</span>String> original = Stream.of("张无忌", "张三丰", "周芷若");
Stream <</span>String> result = original.limit(2);
System . out . println ( result . count ()); // 2
相关文章
|
3月前
|
Java API 数据处理
Java新特性:使用Stream API重构你的数据处理
Java新特性:使用Stream API重构你的数据处理
|
3月前
|
Java 大数据 API
Java Stream API:现代集合处理与函数式编程
Java Stream API:现代集合处理与函数式编程
266 100
|
3月前
|
Java API 数据处理
Java Stream API:现代集合处理新方式
Java Stream API:现代集合处理新方式
299 101
|
3月前
|
并行计算 Java 大数据
Java Stream API:现代数据处理之道
Java Stream API:现代数据处理之道
261 101
|
4月前
|
存储 Java API
Java Stream API:现代数据处理之道
Java Stream API:现代数据处理之道
376 188
|
4月前
|
存储 Java API
Java Stream API:现代数据处理之道
Java Stream API:现代数据处理之道
291 92
|
2月前
|
Java Unix Go
【Java】(8)Stream流、文件File相关操作,IO的含义与运用
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。!但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
196 1
|
5月前
|
Oracle Java 关系型数据库
掌握Java Stream API:高效集合处理的利器
掌握Java Stream API:高效集合处理的利器
407 80
|
5月前
|
安全 Java API
Java 8 Stream API:高效集合处理的利器
Java 8 Stream API:高效集合处理的利器
304 83
|
3月前
|
存储 数据可视化 Java
Java Stream API 的强大功能
Java Stream API 是 Java 8 引入的重要特性,它改变了集合数据的处理方式。通过声明式语法,开发者可以更简洁地进行过滤、映射、聚合等操作。Stream API 支持惰性求值和并行处理,提升了代码效率和可读性,是现代 Java 开发不可或缺的工具。
Java Stream API 的强大功能