Java8新特性(Stream流)

Stream流是用于对数组和集合进行便捷操作的。

Stream流

学习Stream流的步骤:获取Stream流,Stream流常见的中间方法,Stream流常见的终结方法。

Stream流的创建

  1. 获取数组的Stream流:Arrays.stream(arr)
  2. 获取List集合的Stream流:list.stream(  )
  3. 获取Set集合的Stream流:hashSet.stream( )
  4. 获取Map集合的Stream流:
    Set<Map.Entry<Integer, String>> entries = hashMap.entrySet();
    Stream<Map.Entry<Integer, String>> stream2 = entries.stream();

Stream流中间方法

中间方法指的是调用完流之后其结果是一个新的流,还可以继续调用方法,这样一来就可以支持链式编程。

调用中间方法时,一定要连续调用,否则会抛出IllegalStateException异常

常用的中间方法

peek方法不改变流的元素,只是对流中的元素进行操作,然后将流传递给下一个动作。

peek是惰性的,只有在最终操作(forEach,collect,count等)被调用时才会执行。

Stream终结方法

 

 

终结方法不能连续调用,因为此时流已经关闭。 

 Collectors.toList( ):将Stream流中的元素累计到一个List集合中然后返回

Collectors.toSet( ):将Stream流中的元素累计到一个Set集合中然后返回

流的应用案例

案例需求:有一个List集合,元素有 " 张三丰 "," 张无忌 "," 周芷若 "," 赵敏 "," 张强 " ,找出姓张,且是3个字的名 字,存入到一个新集合中去。
 public static void main(String[] args) {List<String> names = new ArrayList<>();Collections.addAll(names,"张无忌","张三丰","周芷若","张强","赵敏");System.out.println(names);//找到所有姓张的,且只有三个字List<String> threeName = new ArrayList<>();names.forEach(s -> {if(s.startsWith("张") && s.length() == 3){threeName.add(s);}});System.out.println(threeName);HashSet<String> hashSet = new HashSet<>();//List集合的stream流Stream<String> stream = names.stream();//Sset集合的stream流Stream<String> stream1 = hashSet.stream();HashMap<Integer,String> hashMap = new HashMap<>();//Map集合的stream流,需要用存放键值对的entrySetSet<Map.Entry<Integer, String>> entries = hashMap.entrySet();Stream<Map.Entry<Integer, String>> stream2 = entries.stream();String[] strings = {"1","2","3","4"};//数组获取流的方法Stream<String> stream3 = Arrays.stream(strings);stream3.filter(new Predicate<String>() {@Overridepublic boolean test(String s) {//s是stream流里面的元素System.out.println(s);return s.startsWith("张") && s.length() == 3;}});//stream是获取的流对象,filter中间添加了过滤条件,collect终结方法,流式编程(链式编程)Set<String> set = stream.filter(s -> s.startsWith("张") && s.length() == 3).collect(Collectors.toSet());System.out.println(set);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/108883.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分享一个基于微信小程序的汽车租赁小程序 车辆出租小程序 汽车租借小程序源码 lw 调试

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人七年开发经验&#xff0c;擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等&#xff0c;大家有这一块的问题可以一起交流&#xff01; &#x1f495;&…

curl快速学习指南:从新手到专家

文章目录 curl入门指南curl的基本语法curl的常用选项curl示例代码curl入门指南 curl是一个强大的工具,它可以用于从服务器获取或发送数据。它支持多种协议,包括HTTP,HTTPS,FTP等。curl语法简单,易于学习。本教程将介绍curl的基本语法和使用方法,并通过示例代码帮助您理解…

【C#项目实战】控制台游戏 勇士斗恶龙(2)——游戏场景的设置以及玩家战斗逻辑

君兮_的个人主页 即使走的再远&#xff0c;也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;最近开始正式的步入学习游戏开发的正轨&#xff0c;想要通过写博客的方式来分享自己学到的知识和经验&#xff0c;这就是开设本专栏的目的。希望…

固定资产管理中净值怎么算

在资产管理的领域中&#xff0c;我们经常听到“净值”这个词。然而&#xff0c;对于许多人来说&#xff0c;净值的概念仍然模糊不清。本文将试图揭示固定资产管理的净值计算方法&#xff0c;并提供一些创新的观点。  我们需要明确什么是净值。在财务术语中&#xff0c;净值是…

模拟实现C语言--strlen函数

模拟实现C语言–strlen函数 模拟实现C语言--strlen函数一、strlen函数是什么&#xff1f;二、strlen函数的模拟实现2.1 计数器方式实现strlen函数2.2 不创建临时变量计数器方式实现strlen函数2.3 指针-指针方式实现strlen函数 三、strlen函数的返回类型 一、strlen函数是什么&a…

hive的建表语句

hive建表语句CREATE TABLE ccwn_zh_event_push (customerid string,cardnumber string,accountnumber string,eventcode string,eventtime string,activities string,activityRefuseCode string,lables string)PARTITIONED BY(dt string)ROW FORMAT SERDE org.apache.hadoop.hi…

plt函数显示图片 在图片上画边界框 边界框坐标转换

一.读取图片并显示图片 %matplotlib inline import torch from d2l import torch as d2l读取图片 image_path ../data/images/cat_dog_new.jpg # 创建画板 figure d2l.set_figsize() image d2l.plt.imread(image_path) d2l.plt.imshow(image);二.给出一个(x左上角,y左上角,…

9.12|day 5|day 44 |完全背包| 518. 零钱兑换 II | 377. 组合总和 Ⅳ

● 完全背包 主要是看清01背包和完全背包的区别 //01背包 for(int i 0;i<weight.size();i){ for(int j bagWeight;j>weight[i];j--){dp[j] Math.max(dp[j],dp[j-weight[i]]value[i]); } } //完全背包 for(int i 0;i<weight.size();i){for(int j weight[i];j<…

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、框架知识分布二、Spring1. spring-单例bean① 问题引入② 单例bean是线程安全的吗③ 问题总结④ 实战面试 2. spring-AOP① 问题引入② AOP记录操作日志③ …

C++ - map 的 例题

前言 本博客在 一下文章关于 map 和 set 讲解之下&#xff0c;对 map 当中的 operator[] &#xff08;&#xff09;函数的功能运用&#xff0c;感受 map 功能强大。 349. 两个数组的交集 - 力扣&#xff08;LeetCode&#xff09; 给定两个数组 nums1 和 nums2 &#xff0c;返回…

9.14号作业

仿照vector手动实现自己的myVector&#xff0c;最主要实现二倍扩容功能 有些功能&#xff0c;不会 #include <iostream>using namespace std; //创建vector类 class Vector { private:int *data;int size;int capacity; public://无参构造Vector(){}//拷贝构造Vector(c…

【C++】常用算术生成算法

0.前言 1.accumulate #include <iostream> using namespace std;// 常用算术生成算法 #include<vector> #include<numeric> //accumulate 的调用头文件void test01() {vector<int>v;for (int i 0; i < 100; i){v.push_back(i);}int total accumu…