JDK新特性-Stream流

news2024/11/27 21:35:14

Stream流是用来操作集合或者数组中的数据的,Stream流提供了一种更加强大的,更加简单的方式来操作集合或者数组中的数据,代码更加简洁,可读性更好。下面是一个简单的例子:

public class S1 {

    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        Collections.addAll(names, "张三丰", "张无忌", "周芷若", "赵敏", "张强");
        System.out.println(names);


        // 找出姓张的,且名字是三个字的存入到新集合中去
        System.out.println(getZ3(names));

        // 使用Stream流实现上述需求
        List<String> list = names.stream()
                .filter(s -> s.startsWith("张"))
                .filter(s -> s.length()==3)
                .collect(Collectors.toList());
        System.out.println(list);
    }

    static List<String> getZ3(List<String> names){
        List<String> newNames = new ArrayList<>();
        // 遍历集合,然后匹配姓张且为三个字的将其添加到新的集合中去
        for (String name : names) {
            if (name.length()==3 && name.startsWith("张")){
                newNames.add(name);
            }
        }
        return newNames;
    }

}

关于Stream流操作数据的描述:Stream流就像是一条流水线,能够跟数据建立连接,然后调用流水线上的各种方法对数据进行处理、计算等,最后获取处理的结果,遍历、统计、收集到一个新集合中返回。

Stream流常见的中间方法:

运用不同中间方法的例子:

        // 需求1:对包含分数的集合,找出大于60的,并进行升序排序后输出
        List<Double> list1 = new ArrayList<>();
        Collections.addAll(list1, 59.0, 80.0, 80.1, 85.2, 79.0, 60.0, 90.0, 86.9);
        list1.stream().filter(s -> s >= 60).sorted().forEach(s -> System.out.println(s));

        // 需求2:找出年龄大于等于23,且年龄小于等于30岁的学生,并按照年龄降序输出
        List<Student> students = new ArrayList<>();
        Student s1 = new Student("张三", 31, 172.1);
        Student s2 = new Student("李四", 27, 180.2);
        Student s3 = new Student("王五", 23, 179.0);
        Student s4 = new Student("赵六", 30, 171.0);
        Student s5 = new Student("赵六", 33, 178.0);
        Collections.addAll(students, s1, s2, s3, s4, s5);

        students.stream().filter(student -> student.age>=23 && student.age<=30).sorted(((o1, o2) -> o2.age - o1.age))
                .forEach(student -> System.out.println(student));

        // 需求3:找出身高前三名的学生输出
        students.stream().sorted(((o1, o2) -> Double.compare(o2.height, o1.height))).limit(3)
                .forEach(student -> System.out.println(student));

        // 需求4:取出身高最矮的两位同学的信息
        System.out.println("最矮的两位同学:");
        students.stream().sorted((o1, o2) -> Double.compare(o1.height, o2.height)).limit(2)
                .forEach(student -> System.out.println(student));

        // 需求5:找出身高超过168的学生的名字,要求去除重复的名字,再输出
        students.stream().filter(student -> student.height>168).map(student -> student.name).distinct()
                .forEach(s -> System.out.println(s));

Stream流常见的终结方法:终结方法是指这些方法调用之后就不会继续返回Stream流了

运用stream流终结方法的例子 

        List<Student> students = new ArrayList<>();
        Student s1 = new Student("张三", 31, 162.1);
        Student s2 = new Student("李四", 27, 180.2);
        Student s3 = new Student("王五", 23, 179.0);
        Student s4 = new Student("赵六", 30, 171.0);
        Collections.addAll(students, s1, s2, s3, s4);

        // 需求1:计算出身高超过168的学生一共有几人
        long count = students.stream().filter(student -> student.height > 168).count();
        System.out.println(count);

        // 需求2:找出身高最高的学生对象
        Student s = students.stream().max(((o1, o2) -> Double.compare(o1.height, o2.height))).get();
        System.out.println(s);

        // 需求3:找出身高最矮的学生对象
        Student ss = students.stream().min(((o1, o2) -> Double.compare(o1.height, o2.height))).get();
        System.out.println(ss);

        // 需求4:找出身高超过170的学生对象,并放到一个新集合中去返回
        List<Student> students1 = students.stream().filter(student -> student.height > 170).collect(Collectors.toList());
        System.out.println(students1);

        // 需求5:找出身高超过170的学生对象,并将其名字和身高放入到一个Map集合中返回
        Map<String, Double> stringDoubleMap = students.stream().filter(student -> student.height > 170).collect(Collectors.toMap(a -> a.name, a -> a.height));
        System.out.println(stringDoubleMap);

        // 将学生对象收集到数组中去
        Student[] students2 = students.stream().toArray(len -> new Student[len]);
        System.out.println(Arrays.toString(students2));

 

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

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

相关文章

12万条中法常见词语对照ACCESS数据库

法文是全球通用的语言之一&#xff0c;要拥有国际视野&#xff0c;学懂全球通用语言是您的必然选择。走向成功之门&#xff0c;尽快学会法文吧。《12万条中法常见词语对照ACCESS数据库》收集了汉语常用词语的法文对照翻译。 本数据库是由 Microsoft Access 2000 创建的 MDB 数据…

算法训练 第三周

一、买卖股票的最佳时机 本题给了我们一个数组&#xff0c;这个数组的第i个元素表示股票第i天的价格&#xff0c;要求我们选择一天买入股票&#xff0c;并在这天之后的某一天卖出&#xff0c;问我们何时能获得最大利润。 1.循环嵌套 我们可以循环遍历所有买入的价格&#xff…

Al中秋节由来

文章目录 简介中秋节的庆祝活动有哪些&#xff1f;有没有其他与中秋节相关的传说或故事&#xff1f; 今天的话题是&#xff0c;扯犊子 简介 中秋节是中国传统的重要节日之一&#xff0c;通常在农历八月十五这一天庆祝。中秋节的由来有多种传说和故事。 其中最有名的传说是关于…

什么是HTTP状态码?常见的HTTP状态码有哪些?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是HTTP状态码&#xff1f;⭐ 1xx - 信息性状态码⭐ 2xx - 成功状态码⭐ 3xx - 重定向状态码⭐ 4xx - 客户端错误状态码⭐ 5xx - 服务器错误状态码⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前…

pcl--第五节 点云表面法线估算

估算点云表面法线 * 表面法线是几何表面的重要属性&#xff0c;在许多领域&#xff08;例如计算机图形应用程序&#xff09;中大量使用&#xff0c;以应用正确的光源以产生阴影和其他视觉效果。 给定一个几何表面&#xff0c;通常很难将表面某个点的法线方向推断为垂直于该点…

Qt(day3)

思维导图 小练习 second.h #ifndef SECOND_H #define SECOND_H#include <QWidget> #include<QLabel> #include<QLineEdit> #include<QPushButton> #include<QTimerEvent> #include<QTime> #include<QTextEdit> #include<QTextT…

北京小程序开发-微信小程序开发时间总结

一、双线程模型 渲染线程和逻辑线程 小程序的双线程指的就是渲染线程和逻辑线程&#xff0c;这两个线程分别承担UI的渲染和执行 JavaScript 代码的工作 渲染线程使用 Webview 进行 UI 的渲染呈现。Webview 是一个完整的类浏览器运行环境&#xff0c;本身具备运行 JavaScript…

Shiro 框架基本使用

文章目录 Shiro框架介绍Shiro 基本使用SimpleAccountRealmIniRealmJdbcRealmCustomRealm&#xff08;自定义Realm&#xff09; Shiro框架介绍 Apache Shiro是一个强大且易用的Java安全框架&#xff0c;它执行身份验证、授权、密码和会话管理。Shiro框架通过其三个核心组件&…

网络爬虫-----爬虫的分类及原理

目录 爬虫的分类 1.通用网络爬虫&#xff1a;搜索引擎的爬虫 2.聚焦网络爬虫&#xff1a;针对特定网页的爬虫 3.增量式网络爬虫 4.深层网络爬虫 通用爬虫与聚焦爬虫的原理 通用爬虫&#xff1a; 聚焦爬虫&#xff1a; 爬虫的分类 网络爬虫按照系统结构和实现技术&#…

白鲸开源 X SelectDB 金融大数据联合解决方案公布!从源头解决大数据开发挑战

业务挑战与痛点 随着互联网技术的发展、云计算技术的成熟、人工智能技术的兴起和数字化经济的崛起&#xff0c;数据已成为企业的核心资产。在金融行业中&#xff0c;数字化已成为了支撑各类业务场景的核心力量&#xff0c;包括个人理财、企业融资、股票交易、保险理赔、贷款服…

【Java 基础篇】Java 文件及文件夹操作详解

在Java编程中&#xff0c;文件和文件夹操作是常见的任务之一。你可能需要读取、写入、创建、删除文件或文件夹&#xff0c;以及遍历文件系统中的内容。本文将详细介绍Java中如何执行这些常见的文件和文件夹操作&#xff0c;适用于初学者和基础用户。 1. 文件操作 读取文件内容…

如何显示并管理Python应用的数据?Kendo UI for Angular有妙招!

Angular是Python应用中进行数据管理和显示的一个很好的选择&#xff0c;如果能使用Kendo UI for Angular则可以更进一步。 PS&#xff1a;给大家推荐一个实用组件~Kendo UI for Angular是专业级的Angular UI组件库&#xff0c;不仅是将其他供应商提供的现有组件封装起来&#…

关于IDEA没有显示日志输出?IDEA控制台没有显示Tomcat Localhost Log和Catalina Log 怎么办?

问题描述&#xff1a; 原因是;CATALINA_BASE里面没有相关的文件配置。而之前学习IDEA的时候&#xff0c;把这个文件的位置改变了。导致&#xff0c;最后输出IDEA的时候&#xff0c;不会把日志也打印出来。 检查IDEA配置; D:\work_soft\tomcat_user\Tomcat10.0\bin 在此目录下&…

打造安全的Open RAN

O-RAN架构在为RAN网络引入更多灵活性和最佳实践的同时&#xff0c;也面临着更多的安全风险。本文分别从网元接口通信、RIC安全框架、云原生安全平台等角度全面介绍O-RAN架构在安全方面应该采取的措施。原文: Security in Open RAN 引言 Open RAN是O-RAN联盟在3GPP及其他标准的…

Eureka服务器注册

一。Eureka服务器注册 1.pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://mav…

Windows10/11无线网卡WIFI驱动详细下载安装教程

官网下载WIFI驱动 《intel官网》 找到下载Windows 10 and Windows 11* WiFi package drivers 查看详细信息 下载对应操作系统的WIFI驱动 安装驱动&#xff0c;然后重启电脑即可。

SSM - Springboot - MyBatis-Plus 全栈体系(十)

第二章 SpringFramework 五、Spring AOP 面向切面编程 4. Spring AOP 框架介绍和关系梳理 AOP是一种区别于OOP的编程思维&#xff0c;用来完善和解决OOP的非核心代码冗余和不方便统一维护问题&#xff01;代理技术&#xff08;动态代理|静态代理&#xff09;是实现AOP思维编…

云原生之使用Docker部署Nas-Cab个人NAS平台

云原生之使用Docker部署Nas-Cab个人NAS平台 一、Nas-Cab介绍二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载Nas-Cab镜像五、部署Nas-Cab5.1 创建挂载目录5.2 创建Nas-Cab容…

前端开发之el-table 表头不换行且宽度自适应

element的table中动态添加表头并设置表头不换行 前言效果图element中使用代码 element-plus中使用:没有了h代码 前言 本次讲解的是elemen和element-plus来通过table的标签render-header来实现的 效果图 element中使用 代码 <template><div><el-table :data&q…

win10修改截图快捷键

用惯了截图快捷键&#xff0c;在新电脑上截图不方便&#xff0c;win10自带截图功能&#xff0c;修改一下系统设置就能使用 点击左下角开始图标&#xff0c;找到Windows 附件&#xff0c;鼠标放到截图工具图标上 点击鼠标右键&#xff0c;选择更多&#xff0c;打开文件位置 跳转…