stream学习

Stream流

定义

Steam流,用于操作集合或者数组中的数据,大量结合了Lamda表达式的语法风格,代码简洁。

重点: 流只能收集一次

在这里插入图片描述


获取Stream流

Stream流要与数据源建立连接。

1.list

​ 直接调用steam()即可

// list
List<String> names = new ArrayList<>();
Collections.addAll(names, "品贵","红旗", "周芷若","张三丰");
Stream<String> stream = names.stream();
stream.filter(s -> s.contains("品")).forEach(s -> System.out.println(s));

2.set

​ 直接调用stream()即可

//set
Set<String> set = new HashSet<>();
Collections.addAll(set, "品贵","红旗", "三个人", "周芷若","张三丰","张三丰");
Stream<String> stream1 = set.stream();
stream1.filter(s -> s.contains("三")).forEach(s -> System.out.println(s));

3.map

​ 需要先将map转换为entrySet(),再通过entryset()进行获取stream()

//mapMap<String, Double> map = new HashMap<>(){{put("古力娜扎", 172.3);put("迪丽热巴", 175.3);put("古力娜扎", 171.4);put("稀里哗啦", 189.3);put("巴啦啦小魔仙", 160.1);}};
//        map.stream()Set<Map.Entry<String, Double>> entries = map.entrySet();Stream<Map.Entry<String, Double>> kvs = entries.stream();kvs.filter(e -> e.getKey().contains("巴")).forEach(System.out::println);
// 简便写法
map.entrySet().stream().filter(e -> e.getKey().contains("巴")).forEach(System.out::println);

4.数组

​ 使用Arrays.stream()

​ 使用Stream.of()

//数组
String[] names2 = {"张翠山", "东方不败", "大唐不夜城", "回民街"};
Stream<String> s1 = Arrays.stream(names2);
Stream<String> s2 = Stream.of(names2);

在这里插入图片描述


Steam流的常见中间方法

中间方法指的是调用完成后会返回新的Stream流,可以继续使用,支持链式编程。

在这里插入图片描述

package stream;import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Stream;public class Test2 {public static void main(String[] args) {List<Double> scores = new ArrayList<>();// 找出大于60分并升序排序后输出Collections.addAll(scores, 88.5, 100.0, 60.6, 99.0, 9.5, 99.6, 25.9);scores.stream().filter(s -> s >= 60).sorted().forEach(System.out::println);System.out.println("-------------------------------------------");List<Student> students = new ArrayList<>();Student s1 = new Student("蜘蛛精", 26, 172.5);Student s2 = new Student("蜘蛛精", 26, 174.5);Student s3 = new Student("紫霞", 216, 122.5);Student s4 = new Student("白晶晶", 25, 175.5);Student s5 = new Student("牛魔王", 13, 166.5);Collections.addAll(students, s1, s2, s3, s4, s5);// 找出年龄大于等于23 年龄小于等于30 并且按照年龄输出students.stream().filter(s -> s.getAge() >= 23 && s.getAge() <= 30).sorted((o1, o2) -> o2.getAge() - o1.getAge()).forEach(System.out::println);System.out.println("-------------------------------------------");// 取出身高前3名的学生 并输出students.stream().sorted((o1, o2) -> Double.compare(o2.getHeight(), o1.getHeight())).limit(3).forEach(System.out::println);System.out.println("-------------------------------------------");// 取出身高倒数2名学生,并输出students.stream().sorted((o1, o2) -> Double.compare(o1.getHeight(), o2.getHeight())).limit(2).forEach(System.out::println);System.out.println("-------------------------------------------");// 找出身高超过168的学生叫什么名字,要求去除重复的名字,再输出students.stream().filter(s -> s.getHeight() > 168).map(Student::getName).distinct().forEach(System.out::println);System.out.println("-------------------------------------------");// 找出身高超过168的学生叫什么名字,要求去除重复的内容,再输出// 首先需要重写equals和hashCode函数 让内容相同的对象设置为一样的students.stream().filter(s -> s.getHeight() > 168).distinct().forEach(System.out::println);System.out.println("-------------------------------------------");Stream<String> st1 = Stream.of("张三", "李四");Stream<String> st2 = Stream.of("张三2", "李四2", "王五");Stream.concat(st1, st2).forEach(System.out::println);}
}

Stream流常见的终结方法

在这里插入图片描述

在这里插入图片描述

package stream;import java.util.*;
import java.util.stream.Collector;
import java.util.stream.Collectors;public class Test3 {public static void main(String[] args) {List<Student> students = new ArrayList<>();Student s1 = new Student("蜘蛛精", 26, 172.5);Student s2 = new Student("蜘蛛精", 26, 172.5);Student s3 = new Student("紫霞", 23, 167.6);Student s4 = new Student("白晶晶", 25, 169.0);Student s5 = new Student("牛魔王", 35, 183.8);Student s6 = new Student("牛夫人", 34, 168.5);Collections.addAll(students, s1, s2, s3, s4, s5, s6);// 需求1:计算身高超过168的人数System.out.println(students.stream().filter(s -> s.getHeight() >= 168).count());//需求2:找出身高最高的学生对象并输出System.out.println(students.stream().max((o1, o2) -> Double.compare(o1.getHeight(), o2.getHeight())).get());//需求3:找出身高最矮的学生对象并输出System.out.println(students.stream().min(((o1, o2) -> Double.compare(o1.getHeight(), o2.getHeight()))).get());//需求4:找出身高超过170的学生对象,放到一个新集合List<Student> student1 = students.stream().filter(s -> s.getHeight() >= 170).collect(Collectors.toList());System.out.println(student1);Set<Student> student2 = students.stream().filter(s -> s.getHeight() >= 170).collect(Collectors.toSet());System.out.println(student2);//需求5:找出身高超过170的学生对象并把学生的名字和身高,存入到一个Map集合中Map<String, Double> map = students.stream().filter(s -> s.getHeight() > 170).distinct().collect(Collectors.toMap(Student::getName, Student::getHeight));map.forEach((k, v) -> {System.out.println(k + "-----" + v);});// 收集到数组中Object[] array = students.stream().filter(s -> s.getHeight() > 170).toArray();System.out.println(Arrays.toString(array));}
}

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

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

相关文章

Python 编程入门指南(一)

1. Python 简介 Python是一种广泛使用的高级编程语言,因其简洁的语法和强大的功能而备受欢迎。Python由Guido van Rossum于20世纪90年代初设计,旨在提供易于阅读和编写的代码,适合从初学者到专业开发者的各个水平。它是一种解释型语言,这意味着在编写和执行代码之间不需要…

计算机三级 数据库技术

第一章 数据库应用系统开发方法 1.1 数据库应用系统生命周期 软件工程:软件工程的思想&#xff0c;即用工程的概念、原理、技术和方法对软件生产、开发的全过程进行跟踪和管理 软件开发方法:瀑布模型、快速原型模型、螺旋模型 DBAS生命周期模型 1.2 规划与分析 系统规划与定…

YOLOv11实战垃圾分类

本文采用YOLOv11作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv11以其高效的特征提取能力&#xff0c;在多个图像分类任务中展现出卓越性能。本研究针对4种垃圾数据集进行训练和优化&#xff0c;该数据集包含丰富的垃圾图像样本&am…

【初阶二】认识C语言—上

【初阶二】认识C语言—上 1.数据类型2.变量3.常量4.字符串5.转义字符6.注释7.选择语句 认识C语言讲的是C语言的基础知识&#xff0c;目的是让大家认识这些知识&#xff0c;后续文章会把这些知识深入讲解&#xff0c;知识点很多&#xff0c;篇幅原因分为上下两篇 1.数据类型 每…

CSS响应式布局实现1920屏幕1rem等于100px

代码解析与实现 设置根元素的 font-size 为 5.208333vw 假设你想让根元素的 font-size 基于视口宽度来动态调整。我们可以通过设置 font-size 为 5.208333vw 来让 1rem 相当于视口宽度的 5.208333%。 计算 5.208333vw: 当屏幕宽度为 1920px 时&#xff0c;5.208333vw 等于 5…

线性DP 区间DP C++

线性DP 题一 数字三角形 解题思路 三角形内的某个点&#xff0c;可以从这个点的左上方或右上方来到这个点&#xff0c;因此有状态转移方程&#xff1a; f[i, j] max(f[i - 1, j - 1] a[i][j], f[i - 1][j] a[i][j]) 代码实现 #include<iostream> #include<algor…

D68【python 接口自动化学习】- python基础之数据库

day68 Python执行SQL语句 学习日期&#xff1a;20241114 学习目标&#xff1a;MySQL数据库-- 137 Python执行SQL语句插入到数据库 学习笔记&#xff1a; commit提交 自动commit 总结 commit提交&#xff1a;pymysql库在执行对数据库有修改操作的行为时&#xff0c;是需要通…

《Python Web 抓取实战:豆瓣电影 Top 250 数据抓取与分析》

引言 在信息爆炸的时代&#xff0c;掌握数据获取的能力显得尤为重要。通过数据抓取&#xff0c;我们可以从互联网上获取大量有价值的信息&#xff0c;并进行深入分析。本文将介绍如何使用 Python 进行 Web 抓取&#xff0c;以豆瓣电影 Top 250 为例&#xff0c;展示数据抓取的…

【项目组件】第三方库——websocketpp

目录 第三方协议&#xff1a;websocket websocket简介 websocket特点 websocket协议切换 websocket协议格式段 websocketpp库介绍 endpoint server connection websocketpp库搭建服务器流程 基本框架实现 业务处理回调函数的实现 http_callback open_callback …

超越传统:探索ONLYOFFICE的革命性办公新纪元

目录 &#x1f341;引言 &#x1f341;一、ONLYOFFICE产品简介 &#xff08;一&#xff09;、介绍 &#xff08;二&#xff09;、基本功能简介 &#x1f341;二、核心功能具体介绍 1、编辑操作 2、文本与段落&#xff1a; 3、样式与图形&#xff1a; 4、表格与图表&…

python解析网页上的json数据落地到EXCEL

安装必要的库 import requests import pandas as pd import os import sys import io import urllib3 import json测试数据 网页上的数据结构如下 {"success": true,"code": "CIFM_0000","encode": null,"message": &quo…

115页PDF | 埃森哲_XX集团信息化能力成熟度评估及能力提升方案(限免下载)

一、前言 这份报告是埃森哲_XX集团信息化能力成熟度评估及能力提升方案&#xff0c;报告首先分析了集团的战略规划&#xff0c;包括调整优化期、转型升级期和跨越发展期的目标&#xff0c;然后识别了集团面临的内部挑战和外部压力&#xff0c;如管控体系不完善、业务板块多样化…

PostgreSQL中表的数据量很大且索引过大时怎么办

在PostgreSQL中&#xff0c;当表的数据量很大且索引过大时&#xff0c;可能会导致性能问题。以下是一些优化索引和表数据的方法&#xff1a; 1. 评估和删除不必要的索引 识别未使用的索引&#xff1a;使用pg_stat_user_indexes和pg_index系统视图来查找未被使用的索引&#x…

智谱AI清影升级:引领AI视频进入音效新时代

前几天智谱推出了新清影,该版本支持4k、60帧超高清画质、任意尺寸&#xff0c;并且自带音效的10秒视频,让ai生视频告别了"哑巴时代"。 智谱AI视频腾空出世&#xff0c;可灵遭遇强劲挑战&#xff01;究竟谁是行业翘楚&#xff1f;(附测评案例)之前智谱出世那时体验了一…

7. djang5 官网 polls app (关于管理员站点)

本教程从 第 6 个教程 结束的地方开始。我们将继续开发 web-poll 应用程序&#xff0c;并专注于自定义 Django 自动生成的管理网站&#xff0c;这一点我们在 第 2 个教程 中首次进行了探索。 自定义管理表单 在 polls/admin.py 中修改&#xff1a; from django.contrib impo…

SQL 注入详解:原理、危害与防范措施

文章目录 一、什么是SQL注入&#xff1f;二、SQL注入的工作原理三、SQL注入的危害1. 数据泄露2. 数据篡改3. 拒绝服务4. 权限提升 四、SQL注入的类型1. 基于错误的信息泄露2. 联合查询注入3. 盲注(1). 基于布尔响应的盲注(2). 基于时间延迟的盲注 4. 基于带外的注入 五、防范SQ…

Java 8中的流API:革新集合处理的强大工具

前言 最近在编写新需求时&#xff0c;学到了一个新的处理List循环遍历的方法&#xff0c;就是使用Java中的流API来处理&#xff0c;具体如下&#xff1a; 原代码&#xff1a; List<School> list list(queryWrapper);List<Student> respList new ArrayList<…

Elasticsearch基本概念及使用

Elasticsearch 是一个开源的、分布式的全文搜索和分析引擎&#xff0c;基于 Apache Lucene 构建。它提供了快速的搜索能力&#xff0c;支持大规模的数据分析&#xff0c;广泛应用于日志分析、全文搜索、监控系统和商业智能等领域。ES操作指令是基于restAPI构建&#xff0c;也就…

无插件H5播放器EasyPlayer.js网页web无插件播放器vue和react详细介绍

EasyPlayer.js H5播放器&#xff0c;是一款能够同时支持HTTP、HTTP-FLV、HLS&#xff08;m3u8&#xff09;、WS、WEBRTC、FMP4视频直播与视频点播等多种协议&#xff0c;支持H.264、H.265、AAC、G711A、Mp3等多种音视频编码格式&#xff0c;支持MSE、WASM、WebCodec等多种解码方…

高级java每日一道面试题-2024年11月06日-JVM篇-什么是 Class 文件? Class 文件主要的信息结构有哪些?

如果有遗漏,评论区告诉我进行补充 面试官: 什么是 Class 文件&#xff1f; Class 文件主要的信息结构有哪些&#xff1f; 我回答: 在 Java 中&#xff0c;.class 文件是一种二进制文件&#xff0c;包含了编译后的 Java 类或接口的信息。Java 源代码&#xff08;.java 文件&a…