对于Java中Stream流的理解
【摘要】
几乎所有的集合(如
Collection
接口或
Map
接口等)都支持直接或间接的遍历操作。而当我们需要对集合中的元
素进行操作的时候,除了必需的添加、删除、获取外,最典型的就是集合遍历
import ;">...
几乎所有的集合(如 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
}
|
其实还用很多方法需要自己去总结。这篇文章就记录到这里吧
文章来源: blog.csdn.net,作者:小小张自由—>张有博,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/promsing/article/details/121633178
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)