Stream

什么是Stream?

也叫Stream流,是jdk8开始新增的一套API,可以用来操作集合或者数组的数据

优势:Stream流大量的结合了Lambda的语法风格来编程,提供了一种更加强大,更加简单的方式操作集合或数组中的数据,代码更简洁,可读性更好

import java.util.*;
import java.util.stream.Collectors;

public class Work1 {
    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        names.add("温小辉");
        names.add("小朱");
        names.add("简隋英");
        names.add("邵群");
        names.add("小白");
        System.out.println(names);
        //找出带小的名字,存入新的集合中去
        List<String> list = new ArrayList<>();
        for (String name : names) {
            if (name.contains("小")&&name.length()==2){
                list.add(name);
            }
        }
        System.out.println(list);

        //开始使用Stream流
        List list1 = names.stream().filter(s->s.contains("小")).filter(a->a.length()==2).collect(Collectors.toList());
        System.out.println(list1);
    }
}

1,如何获取集合和数组的Stream流?

b3173f51044e4412b12d94ba78aed799.png

import java.util.*;
import java.util.stream.Stream;

public class Work1 {
    public static void main(String[] args) {
        //1,如何获取List集合的Stream流?
        List<String> names = new ArrayList<>();
        Collections.addAll(names,"温小辉","小朱","简隋英","邵群","小白");
        Stream<String> stream = names.stream();
        //2,如何获取Set集合的Stream流?
        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集合的Stream流?
        Map<String,Double>map = new HashMap<>();
        map.put("娘娘腔",9.5);
        map.put("你却爱着一个SB",9.9);
        map.put("人鱼陷落",9.8);
        map.put("附加遗产",9.6);
        //键流
        final Set<String> keys = map.keySet();
        final Stream<String> ks = keys.stream();
        //值流
        final Collection<Double> values = map.values();
        final Stream<Double> vs = values.stream();

        //键值对流
        final Set<Map.Entry<String, Double>> entries = map.entrySet();
        final Stream<Map.Entry<String, Double>> kvs = entries.stream();
        kvs.filter(e->e.getKey().contains("人")).forEach(e->System.out.println(e.getKey()+"-->"+e.getValue()));
        String[] names2 = {"言逸","陆上锦","陆言","毕揽星","百刃"};
        final Stream<String> s1 = Arrays.stream(names2);
        final Stream<String> s2 = Stream.of(names2);

    }
}

2,Stream流的常用方法

c8c0f8c99c3741d898b7148e5eab8a23.png

import java.util.*;
import java.util.stream.Stream;

public class Work1 {
    public static void main(String[] args) {
        //需求一:找出成绩大于等于60分的数据,并升序后,再输出
        List<Double> scores = new ArrayList<>();
        Collections.addAll(scores, 88.5,100.0,60.0,99.0,9.5,99.6,25.0);
        scores.stream().filter(s->s>=60).sorted().forEach(s-> System.out.println(s));

        List<Student> students = new ArrayList<>();
        Student s1 = new Student("简隋英",32,188);
        Student s2 = new Student("简隋英",32,188);
        Student s3 = new Student("邵群",31,189);
        Student s4 = new Student("洛羿",19,187);
        Student s5 = new Student("李玉",21,188.5);
        Student s6 = new Student("白新羽",22,185.2);
        Student s7 = new Student("何故",25,183);
        Collections.addAll(students,s1,s2,s3,s4,s5,s6,s7);
        //找出年龄大于等于20且小于等于30,并按照年龄降序输出
        students.stream().filter(s->s.getAge()>=20 &&s.getAge()<=30).sorted(((o1, o2) -> o2.getAge()- o1.getAge())).forEach(s-> System.out.println(s));
        System.out.println(".....................................");

        //取出身高最高的前三名
        students.stream().sorted(((o1, o2) -> Double.compare(o2.getHeight(), -o1.getHeight()))).limit(3).forEach(s-> System.out.println(s));
        System.out.println("......................................");
        //取出身高最矮的两名
        students.stream().sorted(((o1, o2) -> Double.compare(o2.getHeight(), -o1.getHeight()))).skip(students.size()-2).forEach(s-> System.out.println(s));
        //找出身高超过188的叫什么名字,要求去掉重复的名字,再输出
        //distinct去重复,自定义类型的对象(希望内容一样就认为重复,重写hashCode和equals方法)
        students.stream().filter(s->s.getHeight()>=188).map(s->s.getName()).distinct().forEach(s -> System.out.println(s));

        final Stream<String> st1 = Stream.of("张三", "王五");
        final Stream<String> st2 = Stream.of("张三1", "王五2");
        final Stream<Object> allSt = Stream.concat(st1, st2);
        allSt.forEach(s-> System.out.println(s));
    }

}
class Student{
    private String name;
    private int age;
    private double height;

    public Student() {
    }

    public Student(String name, int age, double height) {
        this.name = name;
        this.age = age;
        this.height = height;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", height=" + height +
                '}';
    }
}

3,Stream流常见的终结方法

9a693627eb0641778ae5302ceb896fb5.png

import java.util.*;
import java.util.stream.Collectors;

public class Work1 {
    public static void main(String[] args) {
        List<Student> students = new ArrayList<>();
        Student s1 = new Student("简隋英",32,188);
        Student s2 = new Student("邵群",31,189);
        Student s3 = new Student("洛羿",19,187);
        Student s4 = new Student("李玉",21,188.5);
        Student s5 = new Student("白新羽",22,185.2);
        Student s6 = new Student("何故",25,183);
        Collections.addAll(students,s1,s2,s3,s4,s5,s6);

        //找出身高超过188的并输出
        final long size = students.stream().filter(s -> s.getHeight() > 188).count();
        System.out.println(size);
        //取出身高最高的并输出
        final Student s = students.stream().max((o1, o2) -> Double.compare(o1.getHeight(), o2.getHeight())).get();
        System.out.println(s);

        //取出身高最矮的两名
        Student ss = students.stream().min((o1, o2) -> Double.compare(o1.getHeight(), o2.getHeight())).get();
        System.out.println(ss);
        //找出身高超过185的,并放到一个新集合中去返回
        List <Student> students1 = students.stream().filter(a->a.getHeight()>185).collect(Collectors.toList());
        System.out.println(students1);
        //找出身高超过185的,并把对象的姓名和身高放到Map集合中去返回
        Map<String,Double> map = students.stream().filter(a->a.getHeight()>185).collect(Collectors.toMap(a->a.getName(),a->a.getHeight()));
        System.out.println(map);
        //放在数组中去
        Object[] arr = students.stream().filter(a -> a.getHeight() > 185).toArray();
        System.out.println(Arrays.toString(arr));
    }
}

 

 

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

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

相关文章

CTF-虚拟机-QEMU-前置知识-操作流程与源码阅读

文章目录 总览内存PCI设备PCI配置空间前64个字节对应源码Memorry空间的BARIO空间的BAR MMIOPMIOIspci访问PCI设备配置空间中的Memory空间和IO空间MMIOPMIO QQM&#xff08;qemu object model&#xff09;简洁概要将 TypeInfo 注册 TypeImpl&#xff1a;ObjectClass的初始化&…

新款任务悬赏拉新地推本地任务同城地区定位游戏试玩任务联盟众人帮威客兼职任务墙

新款任务悬赏拉新地推本地任务同城地区定位游戏试玩任务联盟众人帮威客兼职任务墙 源码开源无任何加密及授权 后端采用PHPTinkCMF 前端采用UniappVUE 网页端双端APP可封装小程序可对接公众号登录 采用原生混合框架&#xff0c;拒绝卡顿。 https://download.csdn.net/downl…

文件操作--IO

目录 ♫什么是文件 ♫文件路径 ♫文件类型 ♫文件的管理 ♪File的构造方法 ♪File的常用方法 ♫文件的内容操作 ♪InputStream ♪OutputStream ♪字符流读写文件 ♫Scanner与流对象 ♫什么是文件 文件在计算机里可以指“狭义”的文件&#xff08;指硬盘上的文件和目录&…

第一百八十七回 DropdownButton组件

文章目录 1. 概念介绍2. 使用方法2.1 DropdownButton2.2 DropdownMenuItem 3. 示例代码4. 内容总结5. 经验分享 我们在 上一章回中介绍了"DropdownMenu组件"相关的内容&#xff0c;本章回中将介绍 DropdownButton组件.闲话休提&#xff0c;让我们一起Talk Flutter吧…

基于SpringBoot学生宿舍管理系统的设计与开发

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对学生宿舍信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差…

javaee实验:MVC 框架技术应用——URL 映射及方法参数的使用

目录 urlmvc框架mvc框架的设计mvc流程 实验目的实验内容实验过程创建项目创建项目结构编写代码简单测试一下 url 和 Hypertext 以及 HTTP 一样&#xff0c;URL 是 Web 中的一个核心概念。它是浏览器用来检索 web 上公布的任何资源的机制 URL 代表着是统一资源定位符&#xff…

OpenCV技术应用(6)— 暖色滤镜和冷色滤镜

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。本节课就手把手教大家如何将一幅图像转化成暖色滤镜和冷色滤镜&#xff0c;希望大家学习之后能够有所收获~&#xff01;&#x1f308; 目录 &#x1f680;1.技术介绍 &#x1f680;2.暖色滤镜 &#x1f680;3.冷色滤…

每日一练:阿姆斯特朗数

1. 概述 阿姆斯特朗数&#xff08;Armstrong number&#xff09;&#xff0c;也称为自恋数、自幂数&#xff08;narcissistic number&#xff09;、水仙花数&#xff0c;是指一个n位数&#xff08;n≥3&#xff09;&#xff0c;它的每个位上的数字的n次幂之和等于它本身。换句话…

AVFormatContext协议层:理论与实战

文章目录 前言一、协议操作对象结构二、初始化 AVIOContext 函数调用关系三、avio 实战 1&#xff1a;打开本地文件或网络直播流1、示例源码2、运行结果①、解决方法 1②、解决方法 2 四、avio 实战 2&#xff1a;自定义 AVIO1、示例源码2、运行结果 五、avio 实战 3&#xff1…

Vivado版本控制

Vivado版本控制 如果您有幸进入FPGA领域&#xff0c;那么会遇到版本控制问题&#xff0c;本文讲解的是如何用git进行Vivado进行版本控制。 搭建Git环境 一 首先需要一个git环境&#xff0c;并选择一个托管平台&#xff08;github,gitlab,gitee&#xff09; Git下载地址&…

【广州华锐视点】广东3D展厅开发服务找广州华锐视点,打造未来展览新体验!

随着科技的不断发展&#xff0c;人们对于信息获取和传播的方式也在不断创新。传统的实体展览馆在空间、时间、地域等方面存在诸多限制&#xff0c;而3D数字展厅则为我们提供了一个全新的解决方案。广州华锐互动致力于为客户提供专业的3D数字展厅定制开发服务&#xff0c;让您的…

滑动平均窗口的定义,优点,缺点,以及目前的应用!!

文章目录 前言一、滑动平均窗口的优点二、滑动平均窗口的缺点三、滑动平均窗口的应用 前言 滑动平均窗口是一种数据处理方法&#xff0c;它以固定的窗口大小对数据进行移动&#xff0c;并在每个窗口内计算数据的平均值。这种方法主要用于平滑数据&#xff0c;减小数据波动的影…

鸿蒙开发学习笔记

快速入门 配置网络权限 1.打开项目的 module.json5 文件 2.在module 里面写下面代码 3.这样就可以使用网络图片了 4.模拟器上就可以正常显示网络图片了 5.官方文档有相吸说明 6. 华为官方编辑工具使用技巧&#xff08;内置文档&#xff09;&#xff0c;鼠标移动到标签上&…

计算机网络扫盲(1)——因特网

一、概述 因特网是一个世界范围的计算机网络&#xff0c;即它是一个互联了遍及全世界数十亿计算设备的网络。大家对此应该并不陌生&#xff0c;我们身边有着不计其数的计算机设备被接入了因特网&#xff0c;如今计算机网络这个术语似乎已经有点过时了&#xff0c;用因特网的术语…

STM32-GPIO

一、GPIO简介 GPIO&#xff08;General Purpose Input Output&#xff09;通用输入输出口 可配置8种输入输出模式 引脚电平&#xff1a;0V~3.3V&#xff0c;部分引脚可容忍5V 输出模式下&#xff1a;可控制端口输出高低电平&#xff0c;用以驱动LED、控制蜂鸣器、模拟通信协议输…

159.库存管理(TOPk问题!)

思路&#xff1a;也是tok的问题&#xff0c;与上篇博客思路一样&#xff0c;只不过是求前k个小的元素&#xff01; 基于快排分块思路的代码如下&#xff1a; class Solution { public:int getkey(vector<int>&nums,int left,int right){int rrand();return nums[r%…

多项式拟合求解

目录 简介 基本原理 例1 例2 例3 参考资料 简介 多项式拟合可以用最小二乘求解&#xff0c;不管是一元高阶函数&#xff0c;还是多元多项式函数&#xff0c;还是二者的混合&#xff0c;都可以通过统一的方法求解。当然除了最小二乘法&#xff0c;还是其他方法可以求解&…

Centos7.9搭建zabbix6.4.0过程及报错注意点

搭建参考此链接即可&#xff1a;https://blog.csdn.net/PerDrix/article/details/129624091 报错整理&#xff1a; 一、zabbix6.0以上版本默认必须安装mysql 8.0.30以上版本数据库&#xff0c;否则服务起不来 二、编译安装zabbix时&#xff0c;必须执行如下操作&#xff0c;…

【STM32】STM32学习笔记-课程简介(1)

00. 目录 文章目录 00. 目录01. 课程简介02. 硬件设备03. 软件工具04. 硬件套件4.1 面包板和跳线/飞线4.2 杜邦线和STM32最小系统板4.3 STLINK和OLED显示屏4.4 LED和按键4.5 电位器和蜂鸣器4.6 传感器和旋转编码器4.7 USB转串口和MPU60504.8 Flash闪存和电机模块4.9 SG90舵机 0…

人工智能中的模型评估

1 概述 1.1 定义 人工智能&#xff08;AI&#xff09;模型评估是一个关键的过程&#xff0c;用于确定模型在特定任务上的性能和有效性。这个过程涉及使用各种技术和指标来衡量模型的准确度、可靠性、泛化能力以及其他重要特性。在不同的应用场景中&#xff0c;模型评估的具体…