一文了解Stream流(超详细+干货满满)

news2024/9/30 23:35:15

Stream流是对集合对象功能的增强,专注于对集合对象进行各种便利、高效的聚合操作或者大批量数据操作

//java.util.Collection.stream()方法用集合创建流
//Arrays.asList是将数组转化成List集合的方法
List<String> list = Arrays.asList("hello","world","stream");
//创建顺序流
Stream<String> stream = list.stream();
//创建并行流
Stream<String> parallelStream = list.parallelStream();
//java.util.Arrays.stream(T[] array)方法用数组创建流
String[] array = {"h", "e", "l", "l", "o"};
Stream<String> arrayStream = Arrays.stream(array);

filter:筛选,是按照一定的规则校验流中的元素,将符合条件的元素提取到新的流中的操作

public static void main(String[] args) {
    List<Integer> list = Arrays.asList(6, 7, 3, 8, 1, 2);
    Stream<Integer> stream = list.stream();
    stream.filter(x -> x > 5).forEach(System.out::println);
}
//结果如下:
6
7
8

 映射(map、flatMap、peek)

map:一个元素类型为T的流转换成元素类型为R的流,这个方法传入一个Function的函数式接口,接收一个泛型T,返回泛型R,map函数的定义,返回的流,表示的泛型是R对象,简言之将集合中的元素A转换成想要得到的B

flatMap:接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流。

简言之:与Map功能类似,区别在于将结合A的流转换成B流

 distinct:简而言之就是去重

Stream<String> stream = Stream.of("1", "3","4","10","4","6","23","3");
stream.distinct().forEach(System.out::println);
 
//输出
1
3
4
10
6
23

 forEach:该方法接收一个Lambda表达式,然后在Stream的每一个元素上执行该表达式

List<String> strAry = Arrays.asList( "Jhonny", "David", "Jack", "Duke", "Jill","Dany","Julia","Jenish","Divya");
 
strAry.stream().forEach(s-> {
			if("Jack".equalsIgnoreCase(s)) System.out.println(s);
		});
 
//输出
Jack

 collect:称为收集器,是一个终端操作,它接收的参数是将流中的元素累积到汇总结果的各种方式

//把流中所有元素收集到List中
List<Menu> menus=Menu.getMenus.stream().collect(Collectors.toList());
//把流中所有元素收集到Set中,删除重复项
Set<Menu> menus=Menu.getMenus.stream().collect(Collectors.toSet());
//把流中所有元素收集到给定的供应源创建的集合中
ArrayList<Menu> menus=Menu.getMenus.stream().collect(Collectors.toCollection(ArrayList::new));
//对流中元素的一个整数属性求和
Long count=Menu.getMenus.stream().collect(counting);
//计算流中元素integer属性的平均值
Integer count=Menu.getMenus.stream().collect(summingInt(Menu::getCalories));
//连接流中每个元素的toString方法生成的字符串
Double averaging=Menu.getMenus.stream().collect(averagingInt(Menu::getCalories));
//一个包裹了流中按照给定比较器选出的最大元素的optional,如果为空返回的是Optional.empty()
Optional<Menu> fattest=Menu.getMenus.stream().collect(maxBy(Menu::getCalories));
//一个包裹了流中按照给定比较器选出的最小元素的optional,如果为空返回的是Optional.empty()
 Optional<Menu> lessest=Menu.getMenus.stream().collect(minBy(Menu::getCalories));
//max:根据提供的Comparator返回此流的最大元素
List<Integer> num = Arrays.asList( 4, 5, 6);
num.stream().max(Integer::compareTo).ifPresent(System.out::println);
 
//输出
6
//min:根据提供的Comparator返回此流的最小元素
List<Integer> num = Arrays.asList( 4, 5, 6);
num.stream().min(Integer::compareTo).ifPresent(System.out::println);
 
//输出
4
//count:返回此流中的元素计数
List<Integer> num = Arrays.asList( 4, 5, 6);
System.out.println(num.stream().count());
 
//输出
3

 整体举例

return userList.stream().filter(user -> {
            String userTags = user.getTags();
            if (StringUtils.isBlank(userTags)){
                return false;
            }
            Set<String> tagNameSet = gson.fromJson(userTags, new TypeToken<Set<String>>() {}.getType());
            for (String tagName : tagNameSet) {
                //若有标签不存在
                if (!tagNameSet.contains(tagName)) {
                    return false;
                }
            }
            //所有标签都存在
            return true;
        }).map(this::getSafetyUser).collect(Collectors.toList());

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

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

相关文章

LeetCode面试题02.07链表相交

力扣题目链接 思想&#xff08;数学&#xff09;&#xff1a;设链表A的长度为a&#xff0c;链表B的长度为b&#xff0c;A到交点D的距离为c&#xff0c;B到交点D的距离为d。显然可以得到两者相交链表的长度为&#xff1a;a - c b - d ,变换一下式子得到&#xff1a;a d b c…

Android学习之路(23)组件化框架ARouter的使用

一、功能介绍 支持直接解析标准URL进行跳转&#xff0c;并自动注入参数到目标页面中支持多模块工程使用支持添加多个拦截器&#xff0c;自定义拦截顺序支持依赖注入&#xff0c;可单独作为依赖注入框架使用支持InstantRun支持MultiDex(Google方案)映射关系按组分类、多级管理&…

应用层—HTTPS详解(对称加密、非对称加密、密钥……)

文章目录 HTTPS什么是 HTTPSHTTPS 如何加密HTTPS 的工作过程对称加密非对称加密 HTTPS 什么是 HTTPS HTTPS 也是一个应用层的协议。是在 HTTP 协议的基础上引入的一个加密层。 由来&#xff1a;HTTP 协议内容都是按照文本的方式明纹传输&#xff0c;这就导致在传输过程中出现…

重磅来袭“2024粤港澳电子展”覆盖电子信息完整产业链

2024年4月份粤港澳地区将举办一场规模盛大的电子信息产业博览会。这场展会占地面积高达10万平米&#xff0c;设立了多个展馆&#xff0c;涵盖了智慧家庭、新型显示、高端半导体、信创、大数据与存储、国防军工、人工智能、绿色消费电子、基础元器件等行业热点主题。 CITE品牌创…

开源运维监控工具Uptime Kuma本地部署并结合内网穿透实现公网访问

目录 主要功能 一、前期准备 本教程环境为&#xff1a;Centos7&#xff0c;可以跑Docker的系统都可以使用本教程安装。 本教程使用Docker部署服务&#xff0c;如何安装Docker详见&#xff1a; 二、Docker部署Uptime Kuma 三、实现公网查看网站监控 四、使用固定公网地址…

Pycharm连接远程服务器遇到的问题

文章目录 问题一 pycharm always "uploading pycharm helpers" to same remote python interpreter when starts问题二 [Errno 2] No such file or directory/root/miniconda3/bin/python: cant open file/root/. pycharm helpers/virtualenv-20. 24.5.pyz: 根据大佬…

终于把ESB升级说清楚啦!

我们先前已经介绍了iPaaS和API。本期我们将为大家介绍企业集成的重要工具之一——ESB。 【干货分享】终于有人把ESB升级说清楚啦&#xff01; ESB是什么&#xff1f; 随着信息化发展不断深入&#xff0c;企业在不同的阶段引入了不同的应用、系统和软件。这些原始的应用系统互不…

第04章_IDEA的安装与使用(下)(IDEA断点调试,IDEA常用插件)

文章目录 第04章_IDEA的安装与使用&#xff08;下&#xff09;8. 快捷键的使用8.1 常用快捷键8.2 查看快捷键1、已知快捷键操作名&#xff0c;未知快捷键2、已知快捷键&#xff0c;不知道对应的操作名 8.3 自定义快捷键8.4 使用其它平台快捷键 9. IDEA断点调试(Debug)9.1 为什么…

微信公众平台的四种账号类型比较分享

微信公众号对我们来说并不陌生&#xff0c;日常在使用微信的时候经常会刷到公众号文章。但是怎么去运营一个微信公众号又是另外一门学问&#xff0c;微信公众号和朋友圈不同&#xff0c;是个对外公开的个人主页。对于个人来说&#xff0c;可以用来输出一些内容分析&#xff1b;…

OpenHarmony驱动服务管理开发

驱动服务管理的开发包括驱动服务的编写、绑定、获取或者订阅&#xff0c;详细步骤如下。 驱动服务编写 // 驱动服务结构的定义 struct ISampleDriverService {struct IDeviceIoService ioService; // 服务结构的首个成员必须是IDeviceIoService类型的成员。int32_t (*S…

一些可能对开发三维引擎有帮助的图形学书籍列表

计算机图形学基础&#xff0c;第5版&#xff08;Fundamentals of Computer Graphics, 5th Edition&#xff09; 3D图形渲染手册&#xff1a;探索现代OpenGL和Vulkan的渲染算法的综合指南&#xff08;3D Graphics Rendering Cookbook: A comprehensive guide to exploring rende…

【H3C】配置AAA认证和Telnet远程登陆,S5130 Series交换机

AAA配置步骤为&#xff1a; 1.开启telent远程登陆服务 2.创建用户&#xff0c;设置用户名、密码、用户的服务类型 3.配置终端登录的数量 4.配置vlan-if的ip地址&#xff0c;用来远程登陆 5.允许对应的vlan通过 1.开启telent远程登陆服务 sys …

代码随想录算法训练营第27天 | 39.组合总和 + 40.组合总和II + 131.分割回文串

今日任务 39. 组合总和 40.组合总和II 131.分割回文串 39.组合总和 - Medium 题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中…

数据结构二:线性表之顺序表(不定长顺序表)的设计与实现

本篇博客详细总结数据结构中的第一种结构:线性表之不定长顺序表&#xff0c;主要从以下几个方面梳理&#xff1a;线性表的定义、顺序表的概念、顺序表的基本操作&#xff1a;增删改查的基本思想及代码实现、基本操作的算法效率分析(时间复杂度和空间复杂度)、顺序表的优缺点适用…

曲线生成 | 图解三次样条曲线生成原理(附ROS C++/Python/Matlab仿真)

目录 0 专栏介绍1 什么是样条&#xff1f;2 三次样条曲线原理2.1 曲线插值2.2 边界条件2.3 系数反解 3 算法仿真3.1 ROS C仿真3.2 Python仿真3.3 Matlab仿真 0 专栏介绍 &#x1f525;附C/Python/Matlab全套代码&#x1f525;课程设计、毕业设计、创新竞赛必备&#xff01;详细…

二.Winform使用Webview2在Demo1中实现地址简单校验

Winform使用Webview2在Demo1中实现地址简单校验 往期目录回顾添加对于的简单url验证提示通过上节和本节涉及到的函数有 往期目录 往期相关文章目录 专栏目录 回顾 通过一.Winform使用Webview2(Edge浏览器核心) 创建demo(Demo1)实现回车导航到指定地址 我们已经知道了解决资源…

C语言第五弹---分支语句(上)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 分支语句 1、if语句1.1、if1.2、 else1.3、 分支中包含多条语句1.4、嵌套if1.5、 悬空else问题 2、关系操作符3、 条件操作符总结 C语言是结构化的程序设计语言&…

爬虫案例—抓取找歌词网站的按歌词找歌名数据

爬虫案例—抓取找歌词网站的按歌词找歌名数据 找个词网址&#xff1a;https://www.91ge.cn/lxyyplay/find/ 目标&#xff1a;抓取页面里的所有要查的歌词及歌名等信息&#xff0c;并存为txt文件 一共46页数据 网站截图如下&#xff1a; 抓取完整歌词数据&#xff0c;如下图…

【网络奇遇记】揭秘计算机网络性能指标:全面指南

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、数据结构 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 速率1.1 数据量1.2 速率 二. 带宽三. 吞吐量四. 时延4.1 发送时延4.2 传播时延…

华南理工大学数字信号处理实验实验二源码(薛y老师)

一、实验目的 ▪ 综合运用数字信号处理的理论知识进行信号分析并利用MATLAB作为编程工具进行计算机实现&#xff0c;从而加 深对所学知识的理解&#xff0c;建立概念。 ▪ 掌握数字信号处理的基本概念、基本理论和基本方法。 ▪ 学会用MATLAB对信号进行分析和处理。 ▪ 用F…