对于Java中Stream流的理解

举报
小小张自由--张有博 发表于 2021/11/30 23:10:54 2021/11/30
【摘要】       几乎所有的集合(如 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流的特性如下
  1. Stream流不是一种数据结构,不保存数据,它只是在原数据集上定义了一组操作。
  2. 这些操作是惰性的,即每当访问到流中的一个元素,才会在此元素上执行这一系列操作。
  3. 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。