了解Stream流

文章目录

  • java Stream流
    • 单列集合
    • 双列集合
    • 数组
    • 可变参数
  • filter
    • 什么是filter
    • 从代码中理解filter
    • 截取元素 limt()
    • 跳过指定参数个数的数据 skip()
    • 拼接 concat(流1,流2)
    • 去重 distinct
    • 排序 sorted
      • 升序
      • 降序
    • 统计数据元素 count()
  • 收集Stream流的数据
    • List
    • Set
    • Map

java Stream流

单列集合

创建一个ArrayList 集合,里面存储四个数据,调用 s t r e a m \color{pink}{stream} stream,其中forEach是打印输出。

 ArrayList<String> list = new ArrayList<>();Collections.addAll(list,"张三丰","张飞","曹操","孙尚香");list.stream().forEach(s -> System.out.println(s));

双列集合

创建一个HashMap集合,里面存储对应的Key,Vlaue ,遍历人名。

HashMap<Integer,String> hm = new HashMap<>();hm.put(1,"张三丰");hm.put(2,"张飞");hm.put(3,"曹操");hm.put(4,"孙尚香");Set<Integer> set = hm.keySet();set.stream().forEach(s-> System.out.println(hm.get(s)));

数组

创建一个数组,存储1,2,3 值,使用 s t r e a m ( a r r ) \color{pink}{stream(arr)} stream(arr),遍历数组。

Integer[] arr = {1,2,3};
Arrays.stream(arr).forEach(s-> System.out.println(s));

可变参数

直接将数据放入 S t r e a m . o f \color{pink}{Stream.of} Stream.of中,遍历数据。

Stream.of(1,2,3,4,5,6,7).forEach(s-> System.out.println(s));

filter

什么是filter

  filter(函数式接口)
  filter方法会拿到流中的每一个数据
  把每一个数据传递到Lambda表达式的形参s
  如果返回的是false就丢弃,如果返回的是true留下来

首先我们创建一个ArrayList集合,里面存储一些数据,方便我们后续使用

ArrayList<String> list  = new ArrayList<>();
Collections.addAll(list,"1","2","3","4","5","5","1");

从代码中理解filter

list.stream().filter((String s)->{return true;}).forEach(s -> System.out.println(s));

解释: f i l t e r ( ( S t r i n g \color{red}{filter((String} filter((String s ) − > { r e t u r n \color{red}{s)->{\{return }} s)>{return t r u e ; } ) \color{red}{true;\})} true;})
s 代表集合中存储的每一个数据,而true 表示每一个数据都会保留。

截取元素 limt()

list.stream().limit(3).forEach(s-> System.out.println(s));

解释: 表示截取前三个元素,只遍历前三个数据。

跳过指定参数个数的数据 skip()

list.stream().skip(3).forEach(s-> System.out.println(s));

解释:跳过前三个元素,遍历后面的元素。

拼接 concat(流1,流2)

Stream<String> stream1 = list.stream().limit(3);
Stream<String> stream2 = list.stream().skip(3);
Stream.concat(stream1,stream2).forEach(s-> System.out.println(s));

解释:将 s t r e a m 1 , s t r e a m 2 \color{red}{stream1,stream2} stream1,stream2流进行拼接打印。

去重 distinct

保证元素的唯一性。

list.stream().distinct().forEach(s-> System.out.println(s));

排序 sorted

升序

默认升序

list.stream().sorted().forEach(s-> System.out.println(s));

降序

list.stream().sorted(new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {return Integer.parseInt(o2)-Integer.parseInt(o1);}}).forEach(s-> System.out.println(s));

解释:使用匿名内部类,Comparator并重写compar()方法,使用o2-o1,因为我们上面存储的数据是String类型,我们将类型转化为int类型。

统计数据元素 count()

list.stream().count();

收集Stream流的数据

stream的方法并不改变原有的集合。

存储数据,方便我们下面理解。

ArrayList<Integer> list = new ArrayList<>();Collections.addAll(list,1,2,3,4,5,5,6);

collect方法只负责收集数据,而真正创建集合对象是Collectors.toList

List

List<Integer> newList = list.stream().filter(s -> s > 3).collect(Collectors.toList());
System.out.println(newList);

解释:filter里面的数据是,只要数据中大于3的元素。将大于3的元素存储在一个新的集合newList中。

Set

Set<Integer> set = list.stream().skip(3).collect(Collectors.toSet());
System.out.println(set);

解释:跳过原有list集合中的前三个元素,将其余元素存储在set集合中,由于Set集合的特性,自动给剩余的元素去重,保证元素的唯一性。

Map

Map集合理解起来有些难度,我直接在代码中写注释。

ArrayList<String> list = new ArrayList<>();Collections.addAll(list,"zhangsan,23","lisi,24","wangwu,25");//创建一个Arraylist的集合,里面存储3个数据Map<String, Integer> map = list.stream().filter(s -> {String[] strings = s.split(",");//将ArrayList集合中的数据,使用,分割开,存储到strings的数组中int age = Integer.parseInt(strings[1]);//由于上面的数据已经分割存储到数组中,strings[1]中存储的是数字字符串,23,24,25,//这里我们将String类型转换为int类型return age >= 24;//只要年龄大于等于24的数据// }).collect(Collectors.toMap(Function类型的数据,Function类型的数据));}).collect(Collectors.toMap((String s) -> {return s.split(",")[0];//这里返回的是Map的键Key lisi,wangwu},(String s) -> {return Integer.parseInt(s.split(",")[1]);//这里返回的是Map的值Value 24,25}));System.out.println(map) ;

学的不是技术,更是梦想!!!

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

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

相关文章

医疗器械研发中的可用性工程实践(一)

致读者&#xff1a;以前看《楚门的世界》&#xff0c;《蝴蝶效应》&#xff0c;《肖申克的救赎》&#xff0c;《教父》&#xff0c;《横道世之介》&#xff0c;《老友记》&#xff0c;一个人的一生匆匆。作为平凡人就是历史大河中的浪花&#xff0c;顺势而为&#xff0c;起起伏…

spring boot 配置文件和属性注入

文章目录 配置文件位置和路径自定义配置文件 属性注入添加yaml文件的支持 配置文件 位置和路径 当我们创建一个 Spring Boot 工程时&#xff0c;默认 resources 目录下就有一个 application.properties 文件&#xff0c;可以在 application.properties 文件中进行项目配置&am…

wsl安装ziran2019

首先从windows商店搜索ubuntu18 &#xff08;亲测Ubuntu20不行&#xff09; 然后第一次打开会自动安装。 &#xff08;我是用的wsl一代&#xff0c;二代没测试过&#xff09; 新安装的系统首先要更新apt sudo apt update然后设置git git config --global https.proxy http:…

算法与数据结构(二十一)二叉树(纲领篇)

备注&#xff1a;本文旨在通过 labuladong 的二叉树&#xff08;纲领篇&#xff09;理解框架思维&#xff0c;用于个人笔记及交流学习&#xff0c;版权归原作者 labuladong 所有&#xff1b; 我刷了这么多年题&#xff0c;浓缩出二叉树算法的一个总纲放在这里&#xff0c;也许…

C++ 智能指针shared_ptr

文章目录 C智能指针shared_ptr概述shared_ptr使用方法shared_ptr引用计数的增加与减少shared_ptr常用操作 C智能指针shared_ptr概述 在介绍智能指针前先看如下代码 void func1(std::string& str) {std::string* ps new std::string(str);str *ps;return; }void func2(s…

ELK企业级日志分析系统

目录 一、ELK 概述 1.ElasticSearch 2.Kiabana 3.Logstash 可以添加的其它组件 1.Filebeat 2.Fluentd 三、为什么要使用 ELK 四、ELK 的工作原理 五、 ELK Elasticsearch 集群部署 更改主机名、配置域名解析、查看Java环境 部署 Elasticsearch 软件 修改elasticsearc…

自然语言处理从入门到应用——LangChain:提示(Prompts)-[示例选择器(Example Selectors)]

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 如果我们拥有大量的示例&#xff0c;我们可能需要选择在提示中包含哪些示例。ExampleSelector是负责执行此操作的类。 其基本接口定义如下所示&#xff1a; class BaseExampleSelector(ABC):"""Interf…

爬虫获取电影数据----以沈腾参演电影为例

数据可视化&分析实战 1.1 沈腾参演电影数据获取 文章目录 数据可视化&分析实战前言1. 网页分析2. 构建数据获取函数2.1 网页数据获取函数2.2 网页照片获取函数 3. 获取参演影视作品基本数据4. 电影详细数据获取4.1 导演、演员、描述、类型、投票人数、评分信息、电影海…

Wisej.NET Crack,Wisej.NET的核心功能

Wisej.NET Crack&#xff0c;Wisej.NET的核心功能 Wisej.NET是一个跨平台的web框架&#xff0c;用于使用.NET和C#/VB.NET而不是HTML和JavaScript构建现代HTML5应用程序。它包含创建任务关键型web应用程序所需的一切&#xff0c;包括UI组件、会话处理、状态管理和后端集成。借助…

单元测试之 - Spring框架提供的单元/集成测试注解

Spring框架提供了很多注解来辅助完成单元测试和集成测试(备注&#xff1a;这里的集成测试指容器内部的集成测试&#xff0c;非系统间的集成测试)&#xff0c;先看看Spring框架提供了哪些注解以及对应的作用。RunWith(SpringRunner.class) / ExtendWith(SpringExtension.class)&…

设计模式行为型——备忘录模式

目录 什么是备忘录模式 备忘录模式的实现 备忘录模式角色 备忘录模式类图 备忘录模式举例 备忘录模式代码实现 备忘录模式的特点 优点 缺点 使用场景 注意事项 实际应用 什么是备忘录模式 备忘录模式&#xff08;Memento Pattern&#xff09;又叫做快照模式&#x…

高并发负载均衡---LVS

目录 前言 一&#xff1a;负载均衡概述 二&#xff1a;为啥负载均衡服务器这么快呢&#xff1f; ​编辑 2.1 七层应用程序慢的原因 2.2 四层负载均衡器LVS快的原因 三&#xff1a;LVS负载均衡器的三种模式 3.1 NAT模式 3.1.1 什么是NAT模式 3.1.2 NAT模式实现LVS的缺点…

openwr折腾记7-Frpc使用自主域名解析透传本地服务免费不断线的探索

Frpc使用自主域名解析透传本地服务 综述frp透传http服务结构流程 第一部分openwrt-frpc客户端配置和使用指定服务器指定规则在自己的域名运营商处添加域名解析 第二部分shell编码实现frp自由切换服务器并更新dns解析获取切换服务器参数脚本实现切换脚本更新DNS解析打开openwrt计…

MySQL — InnoDB事务

文章目录 事务定义事务特性事务隔离级别READ UNCOMMITTEDREPEATABLE READREAD COMMITTEDSERIALIZABLE 事务存在的问题脏读&#xff08;Dirty Read&#xff09;不可重复读&#xff08;Non-repeatable Read&#xff09;幻读&#xff08;Phantom Read&#xff09; 事务定义 数据库…

Android Handler 的基本使用

1.前言 https://developer.android.google.cn/reference/android/os/Handler.html Handler 是 Android 中线程通信的常用方式&#xff0c;文档如是说&#xff1a; A Handler allows you to send and process Message and Runnable objects associated with a threads Message…

(十三)大数据实战——hadoop集群之YARN高可用实现自动故障转移

前言 本节内容是关于hadoop集群下yarn服务的高可用搭建&#xff0c;以及其发生故障转移的处理&#xff0c;同样需要依赖zookeeper集群的实现&#xff0c;实现该集群搭建时&#xff0c;我们要预先保证zookeeper集群是启动状态。yarn的高可用同样依赖zookeeper的临时节点及监控&…

构建器/建造者/构建者模式(C++)

定义 将一个复杂对象的构建与其表示相分离,使得同样的构建过程(稳定)可以创建不同的表示(变化)。 应用场景 在软件系统中&#xff0c;有时候面临着“一个复杂对象”的创建工作&#xff0c;其通常由各个部分的子对象用一定的算法构成;由于需求的变化&#xff0c;这个复杂对象…

淘宝API开发(一)简单介绍淘宝API功能接口作用

前一阵子按照上级指示&#xff0c;根据淘宝API开发符合自已应用的系统&#xff0c;比如批量上传&#xff0c;批量修改名称&#xff0c;价格等功能什么的&#xff0c;在此就将我的开发历程写一写&#xff0c;为自己前段时间的工作做个总结。 淘宝开发平台(淘宝网 - 淘&#xff…

Android应用开发(6)TextView进阶用法

Android应用开发学习笔记——目录索引 上一章Android应用开发&#xff08;5&#xff09;文本视图&#xff08;TextView&#xff09;介绍了文本视图&#xff08;TextView&#xff09;设置文本内容、设置文本大小、设置文本显示颜色。 TextView是最基础的文本显示控件&#xff…

PHP正则绕过解析

正则绕过 正则表达式PHP正则回溯PHP中的NULL和false回溯案例案例1案例2 正则表达式 在正则中有许多特殊的字符&#xff0c;不能直接使用&#xff0c;需要使用转义符\。如&#xff1a;$,(,),*,,.,?,[,,^,{。 这里大家会有疑问&#xff1a;为啥小括号(),这个就需要两个来转义&a…