JAVA——Stream流

1.Stream流的作用(流水线)

结合了Lambda表达式,简化集合、数组的操作

2.Stream流的使用步骤

①先得到一条Stream流(流水线),并将数据放上去;

②利用Stream流中的API进行各种操作;

eg:过滤    转换   【中间方法】:方法调用完毕后还可以调用其他方法;(使用次数较多)

     统计    打印   【终结方法】:方法调用完毕后不可以再调用其他方法(一般在最后使用)

③使用终结方法对流水线上的数据进行操作;

3.怎样执行2.①?

获取方式方法名说明
单列集合default Stream<E> stream()Collection中的默认方法
双列集合需先通过KeySet()orentrySet()转化成单列集合...
数组public static <T> Stream<T>stream(T[]array)Array工具类中的静态方法
一堆零散数据public static <T>Stream<T>of(T...values)Stream接口中的静态方法(数据类型尽量一致)

代码演示:(单列集合)

import java.util.ArrayList;
import java.util.Collections;
import java.util.stream.Stream;public class Listof {public static void main(String[] args) {ArrayList<String> list=new ArrayList<>();//创建单列集合Collections.addAll(list,"张三","李四","王五","赵六","思思","张小三","张小思");//批量添加//Stream<String> stream=list.stream();//单列集合获取Stream流//过滤出单列集合中名字以”张“开头且长度为三的名称并进行打印list.stream().filter(name->name.startsWith("张")).filter(name->name.length()==3).forEach(name->System.out.println(name));System.out.println("*********************************************");//获取单列集合中名字是两个字的人名并进行打印list.stream().filter(name->name.length()==2).forEach(name->System.out.println(name));}
}

双列集合:

import java.util.*;public class Listof {public static void main(String[] args) {//双列集合HashMap<Integer,String> hm=new HashMap<>();hm.put(1,"妲己");hm.put(2,"小乔");hm.put(3,"安其拉");hm.put(4,"王昭君");hm.put(5,"甄姬");Set<Integer> integers = hm.keySet();integers.stream().forEach(Key-> System.out.println(Key));System.out.println("***********************************");Set<Map.Entry<Integer, String>> entries = hm.entrySet();entries.stream().filter(name->name.getValue().length()==3).forEach(name-> System.out.println(name));}
}

数组,零散数据:

package Deom130;import java.util.Arrays;
import java.util.stream.Stream;public class Listof {public static void main(String[] args) {//数组int []array1={1,2,3,4,5};String []array2={"a","b","c","d","e"};Arrays.stream(array1).forEach(s-> System.out.println(s));System.out.println("****************************");Arrays.stream(array2).forEach(s-> System.out.println(s));System.out.println("****************************");//零散数据Stream.of(1,2,3,4,5).forEach(s-> System.out.println(s));System.out.println("****************************");Stream.of("a","b","c","d","e").forEach(s-> System.out.println(s));}
}

4.Stream流的中间方法(改变的只是流里面的数据,对原本集合中的数据不会有影响)

名称说明
Stream<T>filter(Predicate<?super T>predicate过滤
Stream<T>limit(long maxSize)

获取前几个元素

limit(3)就是获取前三个元素

Stream<T>skip(long n)跳过前几个元素
Stream<T>distinct()去掉重复元素
static<T>Stream<T>concat(Stream a,Stream b)合并两个流为一个流(两个流上的数据类型尽量保持一致)
Stream<R>map(Function<T,R> mapper)转换流中的数据类型

5.Stream流的终结方法

名称说明
void forEach(Consumer action)遍历
long count()统计
toArray()收集流中的数据放到数组中
collect(Collector)收集流中的数据放到集合中

6.案例分析

import java.util.*;
import java.util.stream.Collectors;public class Listof {public static void main(String[] args) {//定义一个集合,存储数据,过滤奇数。留下偶数,并存储到集合中ArrayList<Integer> list1=new ArrayList<>();Collections.addAll(list1,1,2,3,4,5,6,7,8,9,10);List<Integer> collect = list1.stream().filter(s -> s % 2 == 0).collect(Collectors.toList());System.out.println(collect);System.out.println("***********************************");ArrayList<String> list2=new ArrayList<>();Collections.addAll(list2,"张三,23","李四,24","王五,25");Map<String, String> collect1 = list2.stream().filter(s -> Integer.parseInt(s.split(",")[1]) > 24).collect(Collectors.toMap(s -> s.split(",")[0], s -> s.split(",")[1]));System.out.println(collect1);}
}

需求:

有两个集合,分别存储六个演员年龄和姓名,现需男演员只要名字为3个字的前两个人,女演员只要姓杨的并且不要第一个,再将得到的两个集合合并为一个集合并且封装成以一个Actor对象,最后将数据存到集合list中;

实现代码:

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class Listof {public static void main(String[] args) {ArrayList<String> list1=new ArrayList<>();Collections.addAll(list1,"蔡坤坤,24","比个耶,23","刘不甜,22","伍仟,24","谷嘉,30","肖梁梁,27");ArrayList<String> list2=new ArrayList<>();Collections.addAll(list2,"赵小影,35","杨颖,36","高圆圆,43","张天天,31","刘诗,35","杨小幂,33");Stream<String> boylimit = list1.stream().filter(s -> s.split(",")[0].length()==3).limit(2);Stream<String> girlskip = list2.stream().filter(s -> s.split(",")[0].startsWith("杨")).skip(1);List<Actor> collect = Stream.concat(boylimit, girlskip).map(s -> new Actor(s.split(",")[0], Integer.parseInt(s.split(",")[1]))).collect(Collectors.toList());System.out.println(collect);}
}

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

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

相关文章

典型数据结构的模板实现

栈和数组 1.使用类模板实现数组结构定长数组可变数组 2.使用类模板实现栈结构 在我们初步了解编写模板类后&#xff0c;应当做一下代码练习。这节我们就做一个编写代码的补充&#xff0c;方便大家继续学习模板类的嵌套。作为新手而言&#xff0c;建议大家先写一个具体类&#x…

iOS 后台任务总结

文章目录 首先Apple官方为我们准备了三类后台任务执行的场景:Background TasksBackground Downloading或者Uploading(后台下载或者上传)Background Long-Running Tasks 声明后台服务类型Playing and Recording Background AudioTracking the User’s LocationImplementing a Vo…

CVPR 2023: GeoLayoutLM Geometric Pre-Training for Visual Information Extraction

我们使用以下6个分类标准对本文的研究选题进行分析: 1. 预训练与微调: 预训练: 模型在未适应特定任务之前如何从大量的未标记数据中学习通用表示。GeoLayoutLM 侧重于“几何预训练”,其涉及设计明确教给模型词语和图像元素之间空间关系的任务。例如,预测相对位置、距离甚至…

protoc结合go完成protocol buffers协议的序列化与反序列化

下载protoc编译器 下载 https://github.com/protocolbuffers/protobuf/releases ps: 根据平台选择需要的编译器&#xff0c;这里选择windows 解压 加入环境变量 安装go专用protoc生成器 https://blog.csdn.net/qq_36940806/article/details/135017748?spm1001.2014.3001.…

QEMU搭建Linux-ARM系统

1、安装QEMU需要的nijia工具 在安装QEMU前需要安装nijia工具&#xff0c;使用ninja1.12会出现bug&#xff0c;更换官网1.11.1版本&#xff0c;就可以正常编译了 下载地址&#xff1a; https://github.com/ninja-build/ninja/releases 配置安装 hudahuawiat:~/workspace/QEMU/…

React 中实现拖拽功能-插件 react-beautiful-dnd

拖拽功能在平时开发中是很常见的&#xff0c;这篇文章主要使用react-beautiful-dnd插件实现此功能。 非常好用&#xff0c;附上GitHub地址&#xff1a;https://github.com/atlassian/react-beautiful-dnd 安装及引入 // 1.引入 # yarn yarn add react-beautiful-dnd# npm npm…

SDL库的下载与配置(Visual Studio )2024/2/4更新

一.SDL的下载 下载链接 二.SDL的环境配置 解压以后放在中文路径下 不会添加环境变量自行搜索&#xff08;比较简单网上教程很多&#xff09; 下面进行编译器的配置 复制这段内容 x64\SDL2main.lib x64\SDL2.lib将这段代码放进去运行一下 #include <SDL.h>int main(int…

MySQL 架构和性能优化

重点&#xff1a; 视图&#xff0c;函数&#xff0c;存储过程&#xff0c;触发器&#xff0c;事件&#xff08; 了解 &#xff09; 用户管理&#xff0c;密码管理 grant revoke 权限管理 MySQL 架构&#xff08; 了解 &#xff09; 存储引擎&#xff1a;MyISAM 和 InnoDB …

Vscode配置STM32开发环境(联合Keil MDK/IAR开发)

Vscode配置STM32开发环境&#xff08;替代Keil MDK/IAR&#xff09; 前言 使用了很长时间的Keil5 MDK&#xff0c;以及最近用了一段时间的IAR for ARM&#xff0c;总体来说体验都不是特别的好&#xff0c;Keil功能还行&#xff0c;也不卡顿&#xff0c;就是开发效率、界面样式…

【蓝桥杯冲冲冲】[NOIP2001 普及组] 装箱问题

蓝桥杯备赛 | 洛谷做题打卡day26 文章目录 蓝桥杯备赛 | 洛谷做题打卡day26题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示思路 题解代码我的一些话 [NOIP2001 普及组] 装箱问题 题目描述 有一个箱子容量为 V V V&#xff0c;同时有 n n n 个物品&#xff0c;每…

echarts使用之柱状图(一)

1 基本使用 核心配置主要是xAxis/yAxis/series <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equi…

2018年苏州大学837复试机试C/C++

2018年苏州大学复试机试 要求 要求用C/C编程&#xff1b;对程序中必要的地方进行注释。上机规则 请在电脑桌面上新建一个文件夹文件夹名为考试姓名&#xff08;中文&#xff09;&#xff1b;考试完毕后&#xff0c;将所编写的文件放在上述文件中。 第一题&#xff08;20分&…

07、全文检索 -- Solr -- Solr 全文检索 之 为索引库添加中文分词器

目录 Solr 全文检索 之 为索引库添加中文分词器添加中文分词器1、添加中文分词器的 jar 包2、修改 managed-schema 配置文件什么是 fieldType 3、添加 停用词文档4、重启 solr5、添加【*_cn】动态字段&#xff0c;并为该字段设置中文分词器6、演示分词器的区别演示 text_cjk 这…

瑞_23种设计模式_建造者模式

文章目录 1 建造者模式&#xff08;Builder Pattern&#xff09;1.1 介绍1.2 概述1.3 创作者模式的结构 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 模式拓展 ★★★4.1 重构前4.2 重构后 5 总结5.1 建造者模式优缺点5.2 建造者模式使用场景5.3 建造者模式 …

scikit-learn 1.3.X 版本 bug - F1 分数计算错误

如果您正在使用 scikit-learn 1.3.X 版本&#xff0c;在使用 f1_score() 或 classification_report() 函数时&#xff0c;如果参数设置为 zero_division1.0 或 zero_divisionnp.nan&#xff0c;那么函数的输出结果可能会出错。错误的范围可能高达 100%&#xff0c;具体取决于数…

STM32单片机的C语言基础

C语言是单片机开发中的必备基础知识&#xff0c;本文列举了部分STM32学习中比较常见的一些C语言基础知识。 1 位操作 下面我们先讲解几种位操作符&#xff0c;然后讲解位操作使用技巧。C语言支持以下六种位操作&#xff1a; 下面&#xff0c;重点讲解一下位操作在单片机开发中…

Ubuntu文件系统结构

Ubuntu文件系统结构 介绍 Ubuntu是一种备受欢迎的Linux发行版&#xff0c;其文件系统结构以及组织方式是每个使用者和系统管理员都应该了解的重要主题。本篇博客将带您深入探索Ubuntu文件系统的结构&#xff0c;以便更好地理解Linux操作系统的工作原理。 1. 根目录&#xff…

通过servlet设计一个博客系统

博客系统 准备工作servlrt依赖mysql依赖jackson依赖 服务器和数据库的交互设计数据库/数据表封装DBUtil,实现建立连接和断开连接创建实体类bloguser 编写Dao类BlogDaoUserDao 前端和服务器的交互功能一:博客列表页约定格式后端代码前端代码 功能二:实现博客详情页约定格式后端代…

sql相关子查询

1.什么是相关子查询 相关子查询是一个嵌套在外部查询中的查询&#xff0c;它使用了外部查询的某些值。每当外部查询处理一行数据时&#xff0c;相关子查询就会针对那行数据执行一次&#xff0c;因此它的结果可以依赖于外部查询中正在处理的行。 2.为什么要使用相关子…

Python 数据可视化:配色方案

1、引言 在这篇文章中&#xff0c;我们将研究Python的一些配色方案&#xff0c;主要是Seaborn库。这将采用 Python Notebook 格式&#xff0c;其中包括绘图的代码。 2、实验数据 首先导入必要的库&#xff1a; import pandas as pd import seaborn as sns import matplotlib…