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()

//map
       Map<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));
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙动画开发06——打断动画

1、前 言 UI界面除了运行动画之外&#xff0c;还承载着与用户进行实时交互的功能。当用户行为根据意图变化发生改变时&#xff0c;UI界面应做到即时响应。 例如用户在应用启动过程中&#xff0c;上滑退出&#xff0c;那么启动动画应该立即过渡到退出动画&#xff0c;而不应该…

运算放大器的学习(一)输入阻抗

输入阻抗 最近需要对运算放大器进行学习&#xff0c;我们后面逐一对其参数进行了解。 首先了解下输入阻抗。 放大电路技术指标测试示意图&#xff1a; 输入电阻&#xff1a; 从放大电路的输入端看进去的等效电阻称为放大电路的输入电阻&#xff0c;如上图&#xff0c;此处考虑…

【测试框架篇】单元测试框架pytest(1):环境安装和配置

一、pytest简介 Pytest是Python的一种单元测试框架&#xff0c;与Python自带的unittest测试框架类似&#xff0c;但是比 unittest框架使用起来更简洁&#xff0c;效率更高。 二、pytest特点 Pytest是一个非常成熟的Python测试框架,主要特点有以下几点&#xff1a; 非常容易…

蓝桥杯竞赛单片机组备赛【经验帖】

本人获奖情况说明 笔者本人曾参加过两次蓝桥杯电子赛&#xff0c;在第十二届蓝桥杯大赛单片机设计与开发组获得省级一等奖和国家级二等奖&#xff0c;在第十五届嵌入式设计开发组获得省级二等奖。如果跟着本帖的流程备赛&#xff0c;只要认真勤奋&#xff0c;拿个省二绝对没问…

力扣 LeetCode 541. 反转字符串II(Day4:字符串)

解题思路&#xff1a; i可以成段成段的跳&#xff0c;而不是简单的i class Solution {public String reverseStr(String s, int k) {char[] ch s.toCharArray();// 1. 每隔 2k 个字符的前 k 个字符进行反转for (int i 0; i < ch.length; i 2 * k) {// 2. 剩余字符小于 …

密码学知识点整理二:常见的加密算法

常用的加密算法包括对称加密算法、非对称加密算法和散列算法。 对称加密算法 AES&#xff1a;高级加密标准&#xff0c;是目前使用最广泛的对称加密算法之一&#xff0c;支持多种密钥长度&#xff08;128位、192位、256位&#xff09;&#xff0c;安全性高&#xff0c;加密效率…

css:修改盒子样式

圆角边框 在css3中新增了圆角边框样式&#xff0c;这样我们的盒子就可以长得奇形怪状了 像csdn上的发布就是圆角边框 还有这些 .x,.y {background-color: cornflowerblue;width: 200px;height: 200px;margin: 0 auto;text-align: center;border-radius: 10px;} 10px是什么意思…

连续九届EI稳定|江苏科技大学主办

【九届EI检索稳定|江苏科技大学主办 | IEEE出版 】 &#x1f388;【截稿倒计时】&#xff01;&#xff01;&#xff01; ✨徐秘书&#xff1a;gsra_huang ✨往届均已检索&#xff0c;已上线IEEE官网 &#x1f38a;第九届清洁能源与发电技术国际学术会议&#xff08;CEPGT 2…

机器学习 - 为 Jupyter Notebook 安装新的 Kernel

https://ipython.readthedocs.io/en/latest/install/kernel_install.html 当使用jupyter-notebook --no-browser 启动一个 notebook 时&#xff0c;默认使用了该 jupyter module 所在的 Python 环境作为 kernel&#xff0c;比如 C:\devel\Python\Python311。 如果&#xff0c…

DVWA靶场通关——SQL Injection篇

一&#xff0c;Low难度下unionget字符串select注入 1&#xff0c;首先手工注入判断是否存在SQL注入漏洞&#xff0c;输入1 这是正常回显的结果&#xff0c;再键入1 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for…

无人机飞手执照处处需要,森林、石油管道、电力巡检等各行业都需要

无人机飞手执照在多个行业中确实具有广泛的应用需求&#xff0c;包括森林、石油管道、电力巡检等领域。以下是对这些领域无人机飞手执照需求的具体分析&#xff1a; 一、森林领域 在森林领域&#xff0c;无人机飞手执照对于进行高效、准确的森林资源管理和监测至关重要。无人机…

基于YOLO11/v10/v8/v5深度学习的水面垃圾智能检测识别系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

家政服务小程序,家政行业数字化发展下的优势

今年以来&#xff0c;家政市场需求持续增长&#xff0c;市场规模达到了万亿级别&#xff0c;家政服务行业成为了热门行业之一&#xff01; 家政服务种类目前逐渐呈现了多样化&#xff0c;月嫂、保姆、做饭保洁、收纳、维修等家政种类不断出现&#xff0c;满足了居民日益增长的…

音视频入门基础:MPEG2-TS专题(3)——TS Header简介

注&#xff1a;本文有部分内容引用了维基百科&#xff1a;https://zh.wikipedia.org/wiki/MPEG2-TS 一、引言 本文对MPEG2-TS格式的TS Header进行简介。 进行简介之前&#xff0c;请各位先下载MPEG2-TS的官方文档。ITU-T和ISO/IEC都分别提供MPEG2-TS的官方文档。但是ITU提供的…

Spring Boot框架:构建符合工程认证的计算机课程

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

【ubuntu16.04】机器人学习笔记遇到的问题及解决办法:仿真小海龟

18版本的后面会出问题&#xff0c;避免万一我还是用了之前的16版本&#xff0c;虽然还没有解决粘贴的问题&#xff0c;但是安装ros很成功 可参考该文章博主讲的很详细&#xff0c;成功画出海龟 最后要把鼠标停在第三个终端&#xff0c;再去点击键盘&#xff0c;海龟才会动哦

Unity学习---IL2CPP打包时可能遇到的问题

写这篇主要是怕自己之后打包的时候出问题不知道怎么搞&#xff0c;所以记录一下。 问题一&#xff1a;类型裁剪 IL2CPP打包后会自动对Unity工程的dll进行裁剪&#xff0c;将代码中没有引用到的类型裁剪掉。特别是通过反射等方式调用一些类的时候&#xff0c;很容易出问题。 …

批量将MySQL中的MyISAM引擎,改成InnoDB引擎

一、InnoDB和MyISAM的区别 MySQL中InnoDB和MyISAM是两种常用的存储引擎&#xff0c;具有以下不同的特点&#xff1a; 序号InnoDBMyISAM说明事务支持支持不支持InnoDB可以处理更复杂的业务逻辑&#xff0c;而MyISAM在处理大量并发写入时可能会遇到问题‌锁定机制行级锁定表级锁…

认证鉴权框架SpringSecurity-1--概念和原理篇

1、基本概念 Spring Security 是一个强大且高度可定制的框架&#xff0c;用于构建安全的 Java 应用程序。它是 Spring 生态系统的一部分&#xff0c;提供了全面的安全解决方案&#xff0c;包括认证、授权、CSRF防护、会话管理等功能。 2、认证、授权和鉴权 &#xff08;1&am…

C++11新特性(二)

目录 一、C11的{} 1.初始化列表 2.initializer_list 二、可变参数模版 1.语法与原理 2.包扩展 3.empalce接口 三、新的类功能 四、lambda 1.语法 2.捕捉列表 3.原理 五、句装器 1.function 2.bind 一、C11的{} 1.初始化列表 C11以后想统⼀初始化⽅式&#xff0…