Java-Stream流

不同的数据有不同的方式得到其stream

  • 单列集合:使用Collection中的默认方法:default Stream<E> stream
  • 双列集合:没有直接获取stream的方法,只能把他转化为单列集合
  • 数组:Arrays中的静态方法:public static <T> Stream<T> stream(T[] array)
  • 一堆零散的数据:这些数据必须同质,使用Stream接口中的方法:public static<T> Stream<T> of(T ...values)

中间方法

  • 使用中间方法,会返回一个新的流
  • stream只能使用一次,最好使用链式编程
  • 修改Stream中的数据,不会改变原集合中的数据

filter

Stream<T> filter(Predicate<? super T> predicate)

按照某种规则过滤元素。

匿名内部类写法

Stream<String> stream = list.stream().filter(new Predicate<String>() {@Overridepublic boolean test(String s) {if (s.startsWith("")) {return true;}return false;}
});

lambda表达式写法

Stream<String> stream = list.stream().filter(s -> s.startsWith(""));

limit

Stream<T> limit(long maxSize)

获取前maxSize个元素

skip

Stream<T> skip(long n)

跳过前n个元素

distinct

Stream<T> distinct()

元素去重,依赖于hashcode和equals方法,因为其底层是使用HashSet实现的。

concat

static <T> Stream<T> concat(Stream a, Stream b)

将a和b合并为一个流

map

Stream<T> map(Function<T, R> mapper)

转换流中的数据类型

匿名内部类写法

// Function<T, R>,则apply方法的返回值是R,接收的stream的泛型也得是R
Stream<Integer> stream = list.stream().map(new Function<String, Integer>() {@Overridepublic Integer apply(String s) {return Integer.parseInt(s);}
});

lambda表达式写法

Stream<Integer> stream = list.stream().map(s -> Integer.parseInt(s));

终结方法

  • 终结方法的返回值不是stream

forEach

void for Each(Consumer action)

用来遍历流,可以进行一些操作

// 匿名内部类的写法
// accept的参数s代表的是流上的每一个数据,也就是list中的每一个元素
list.stream().forEach(new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}
});// lambda表达式的写法
list.stream().forEach(s -> System.out.println(s));

count

long count()

统计流上数据个数,也就是原数据元素的个数

toArray

toArray()

收集流中的数据,放在数组中
![[Pasted image 20240722145730.png]]

// IntFunction的泛型值得是具体的类型数组
// apply的参数是流中数据的个数,需要与数组的长度保存一致
list.stream().toArray(new IntFunction<String[]>() {@Overridepublic String[] apply(int value) {return new String[value];}
});// lambda表达式的写法
list.stream().toArray(value -> new String[value]);

collect

collect(Collector collector)

收集流中的数据,放在集合中。在收集前也可以使用一些中间方法进行筛选

  • 收集到List中,参数是Collectors.toList()
list.stream().collect(Collectors.toList());
  • 收集到Set中,参数是Collectors.toSet()
 list.stream().collect(Collectors.toSet());
  • 收集到Map中,参数是Collectors.toMap(a,b),其中a和b是两个匿名内部类,第一个对应健的生成规则,第二个对应值的生成规则
// 使用匿名内部类
list.stream().collect(Collectors.toMap(new Function<String, Integer>() {@Overridepublic Integer apply(String s) {return Integer.parseInt(s);}}, new Function<String, Integer>() {@Overridepublic Integer apply(String s) {return Integer.parseInt(s);}}
));// 使用lambda表达式
list.stream().collect(Collectors.toMap(s -> Integer.parseInt(s), s -> Integer.parseInt(s)));

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

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

相关文章

SpringCloud的认识和初步搭建

目录 一.认识SpringCloud 二.SpringCloud的部署 2.1开发环境 2.2数据库的建立 2.3SpringCloud的部署 第一步&#xff1a; 创建Maven项目 第二步&#xff1a;完善pom文件 第三步&#xff1a;创建两个子项目 第四步&#xff1a;声明项目依赖以及构建插件 第五步&#xf…

NVIDIA Container Toolkit 安装与配置帮助文档(Ubuntu,Docker)

NVIDIA Container Toolkit 安装与配置帮助文档(Ubuntu,Docker) 本文档详细介绍了在 Ubuntu Server 22.04 上使用 Docker 安装和配置 NVIDIA Container Toolkit 的过程。 概述 NVIDIA 容器工具包使用户能够构建和运行 GPU 加速容器。即可以在容器中使用NVIDIA显卡。 架构图如…

JVM基本知识——运行空间

JVM&#xff08;Java Virtual Machine&#xff09;即Java虚拟机&#xff0c;是负责读取java字节码&#xff0c;并在实际的硬件环境中运行。 JVM可以分为三部分&#xff1a;类装载器&#xff08;ClassLoader&#xff09;子系统、内存空间、执行引擎 内存空间&#xff08;运行时…

防火墙--双机热备

目录 双击热备作用 防火墙和路由器备份不同之处 如何连线 双机 热备 冷备 VRRP VGMP&#xff08;华为私有协议&#xff09; 场景解释 VGMP作用过程 主备的形成场景 接口故障的切换场景 整机故障 原主设备故障恢复的场景 如果没有开启抢占 如果开启了抢占 负载分…

Debian Linux下rclone挂载谷歌云盘碰到的坑

可能是明月好久没有使用境外服务器挂载境外的云盘缘故吧,今天一个代维客户需要他的Linux服务器挂载谷歌云盘好进行云备份,本来是个很简单的事儿,没想到在rclone连接谷歌云盘的时候卡壳了,可是把明月给难为坏了,搜索到的简体中文教程倒是很多,但没有一个提到这个“坑”,最…

MySQL学习记录 —— 이십삼 MySQL服务器文件系统(3)

文章目录 1、数据字典2、系统表各种系统表 Mysql Schema是⼀个系统库&#xff0c;表中存储了MySQL服务器运行时所需的信息。广义上&#xff0c;mysql schema包含存储MySQL程序基本数据的数据字典和用于其他操作目的的系统表。数据字典表和系统表位于数据目录下一个名为mysql.ib…

数据结构初阶(c语言)-双向链表

这里首先纠正上篇文章一个错误&#xff0c;链表的一个有效数据点应该称为结点而不是节点。 一&#xff0c;双向链表的概念与结构 1.1概念与结构示意图 我们所说的双向链表全称为带头双向循环链表&#xff0c;也就是说此链表带有哨兵位结点(不存放任何数据的结点&#xff0c;且…

简单实用的企业舆情安全解决方案

前言&#xff1a;企业舆情安全重要吗&#xff1f;其实很重要&#xff0c;尤其面对负面新闻&#xff0c;主动处理和应对&#xff0c;可以掌握主动权&#xff0c;避免股价下跌等&#xff0c;那么如何做使用简单实用的企业舆情解决方案呢&#xff1f; 背景 好了&#xff0c;提取词…

Qt Style Sheets-设计器集成

设计器集成 Qt Designer&#xff08;Qt Designer&#xff09;是一个出色的工具&#xff0c;用于预览样式表。您可以在 Designer 中右键单击任何小部件&#xff0c;并选择“更改样式表...”来设置样式表。 在 Qt 4.2 及更高版本中&#xff0c;Qt Designer 还包括一个样式表语法…

洗地机什么牌子好?洗地机排行榜前十名推荐

在追求高效与便捷的现代生活中&#xff0c;洗地机已成为家居清洁不可或缺的智能助手。面对市场上琳琅满目的品牌与型号&#xff0c;洗地机什么牌子好成为很多人选购前的疑问。本篇文章将为您精心推荐洗地机排行榜前十名的知名品牌&#xff0c;包括希亦、追觅、添可等&#xff0…

《0基础》学习Python——第二十三讲__网络爬虫/<6>爬取哔哩哔哩视频

一、在B站上爬取一段视频&#xff08;B站视频有音频和视频两个部分&#xff09; 1、获取URL 注意&#xff1a;很多平台都有反爬取的机制&#xff0c;B站也不例外 首先按下F12找到第一条复制URL 2、UA伪装&#xff0c;下列图片中&#xff08;注意代码书写格式&#xff09; 3、Co…

【效率提升】程序员常用Shell脚本

文章目录 常用Shell脚本一. 定期更新分区数据二、获取系统资源的使用情况 常用Shell脚本 一. 定期更新分区数据 在某些场景下&#xff0c;我们需要对N年前某一分区的数据进行删除&#xff0c;并添加今年该对应分区的数据&#xff0c;实现数据的流动式存储。 #!/bin/bash dt$…

前端-模拟请求数据mook第三方插件 json-server的使用

大纲 第一步下载第二配置mook的数据源第三配置启动命令第四运行模拟服务第五测试接口如果要进行更复杂的操作 第一步下载 npm install json-server -D"devDependencies": {"json-server": "^1.0.0-beta.1"}第二配置mook的数据源 在项目的根目录…

如何在Ubuntu上安装并启动SSH服务(Windows连接)

在日常的开发和管理工作中&#xff0c;通过SSH&#xff08;Secure Shell&#xff09;连接到远程服务器是一个非常常见的需求。如果你在尝试通过SSH连接到你的Ubuntu系统时遇到了问题&#xff0c;可能是因为SSH服务未安装或未正确配置。本文将介绍如何在Ubuntu上安装并启动SSH服…

macOS 10.15中屏蔽Microsoft Edge浏览器的更新提示

文章目录 1.效果对比2.安装描述文件3.停用描述文件4.高级操作&#xff08;可选&#xff09;参考文献 最近在macOS10.15系统&#xff0c;打开Microsoft Edge浏览器&#xff0c;每次打开都有个烦人的提示“ 要获取将来的 microsoft edge 更新&#xff0c;需要 macos 10.15 或更高…

MFC:以消息为基础的事件驱动系统和消息映射机制

以消息为基础的事件驱动系统和消息映射机制 (1)消息 A.What&#xff08;什么是消息&#xff09; 本质是一个数据结构&#xff0c;用于应用程序不同部分之间进行通信和交互 typedef struct tagMSG {HWND hwnd; // 接收该消息的窗口句柄UINT message; // 消息标…

blender使用- 置换修改器

置换修改器 对于物体可以先做细分&#xff0c;然后添加置换修改器&#xff0c;添加贴图。再对贴图的参数进行修改&#xff0c;渲染想要的效果。 旋转模式下&#xff08;按下s&#xff09;&#xff0c;z表示方向&#xff0c;0表示平整

初学51单片机之指针基础与串口通信应用

开始之前推荐一个电路学习软件&#xff0c;这个软件笔者也刚接触。名字是Circuit有在线版本和不在线版本&#xff0c;这是笔者在B站看视频翻到的。 Paul Falstadhttps://www.falstad.com/这是地址。 离线版本在网站内点这个进去 根据你的系统下载你需要的版本红线的是windows…

C++中的多路转接技术之epoll

epoll 是干什么的&#xff1f;举个简单的例子 epoll的相关系统调用**epoll_create**和epoll_create1区别 epoll_ctl参数解释 **epoll_wait**参数说明返回值 epoll的使用 **epoll**工作原理epoll的优点(和 **select** 的缺点对应)epoll工作方式**水平触发**Level Triggered 工作…

艺术成分很高的完全自定义的UITabBar(很简单)

引言 在iOS应用开发中&#xff0c;UITabBar是一个非常场景且重要的UI组件。系统为我们提供的UITabBar虽然功能强大&#xff0c;但是在某些情况下&#xff0c;它的标准样式并不能满足我们特定的设计需求&#xff0c;它的灵活性也有一些局限。为了打造更具个性化好的用户友好的交…