对于JavaStream流的理解
几乎所有的集合(如 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
}
|
其实还用很多方法需要自己去总结。这篇文章就记录到这里吧
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfaiak
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01