Java8 新特性 Stream流操作

数据准备

package test;

/**
 * [一句话描述该类的功能]
 *
 * @author : [61692]
 * @version : [v1.0]
 * @createTime : [2024/3/31 14:52]
 */
public class Student {

    private int id;

    private  int age;

    private  int yuwenScore;

    private int mathScore;

    private String name;

    private int yingyuScore;

    private String stuClass;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getStuClass() {
        return stuClass;
    }

    public void setStuClass(String stuClass) {
        this.stuClass = stuClass;
    }

    public int getAge() {
        return age;
    }

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

    public int getYuwenScore() {
        return yuwenScore;
    }

    public void setYuwenScore(int yuwenScore) {
        this.yuwenScore = yuwenScore;
    }

    public int getMathScore() {
        return mathScore;
    }

    public void setMathScore(int mathScore) {
        this.mathScore = mathScore;
    }

    public String getName() {
        return name;
    }

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

    public int getYingyuScore() {
        return yingyuScore;
    }

    public void setYingyuScore(int yingyuScore) {
        this.yingyuScore = yingyuScore;
    }

//    public Student(int age, int yuwenScore, int mathScore, String name, int yingyuScore) {
//        this.age = age;
//        this.yuwenScore = yuwenScore;
//        this.mathScore = mathScore;
//        this.name = name;
//        this.yingyuScore = yingyuScore;
//    }

    public Student() {

    }


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

Student student = new Student();
        student.setAge(12);
        student.setName("zhang");
        student.setId(1);
        student.setStuClass("1班");
        student.setMathScore(85);
        student.setYingyuScore(80);
        student.setYuwenScore(75);

        Student student1 = new Student();
        student1.setAge(14);
        student1.setId(2);
        student1.setName("li");
        student1.setStuClass("2班");
        student1.setMathScore(67);
        student1.setYingyuScore(84);
        student1.setYuwenScore(71);

        Student student2 = new Student();
        student2.setAge(14);
        student2.setId(3);
        student2.setName("li");
        student2.setStuClass("2班");
        student2.setMathScore(89);
        student2.setYingyuScore(83);
        student2.setYuwenScore(88);

        Student student3 = new Student();
        student3.setAge(14);
        student3.setId(4);
        student3.setName("li");
        student3.setStuClass("1班");
        student3.setMathScore(76);
        student3.setYingyuScore(91);
        student3.setYuwenScore(92);

        List<Student> students = new ArrayList<>();
        students.add(student);
        students.add(student1);
        students.add(student2);
        students.add(student3);

(1)过滤操作

List<Student> studentList = students.stream().filter(item -> item.getAge() == 12).collect(Collectors.toList());

for(Student item : studentList){
    System.out.println("item.toString() = " + item.toString());
}

使用filter操作时,一定要注意,filter不是一个void类型的方法,因此下面的操作时错误的:

students.stream().filter(item -> item.getAge() == 12).collect(Collectors.toList());

students数组不会过滤age =12
不信,我们可以验证一下。
在这里插入图片描述students并没有实现过滤,
因此,需要 List studentList = students.stream().filter(item -> item.getAge() == 12).collect(Collectors.toList());
在这里插入图片描述

(2)抽取属性值

我们开发时是不是经常会将每个数组中的id抽取成一个idlist.
那么Stream中的map()可以帮助到你

List<Integer> list1 = students.stream().map(Student::getAge).toList();
for(Integer item : list1){
    System.out.println("item.toString() = " + item.toString());
}

抽取StudentId
在这里插入图片描述

(3)数据分组 GroupBy

Map<String,Map<String,Integer>> result1 = students.stream().collect(
                Collectors.groupingBy(Student::getStuClass,Collectors.mapping(
                        studentItem -> {
                            Map<String,Integer> groupByResult= new HashMap<>();
                            groupByResult.put("yuwenScore",studentItem.getYuwenScore());
                            groupByResult.put("mathScore",studentItem.getMathScore());
                            groupByResult.put("yingyuScore",studentItem.getYingyuScore());
                            return groupByResult;
                        },Collectors.reducing(new HashMap<>(), (map1,map2) ->{
                            Map<String,Integer> resultMapping = new HashMap<>(map1);
                            map2.forEach((key,value) -> resultMapping.merge(key, value, Integer::sum));
                            return resultMapping;
                        })
                ))
        );
        // 输出每个班级的成绩
        result1.forEach((stuClass, scores) -> {
            System.out.println(stuClass + ":");
            scores.forEach((subject, totalScore) -> System.out.println(subject + ": " + totalScore));
        });

我们对StuClass(学生班级)进行分组,对语文,数学,英语的分数进行分组统计
在这里插入图片描述

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

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

相关文章

c++初阶篇----string的底层模拟

string类的模拟 目录 string类的模拟功能介绍各功能的实现类的构造函数&#xff0c;拷贝构造函数&#xff0c;析构函数迭代器的实现string的内部容量访问成员函数string的修改成员函数string类的相关联函数string类的输入输出友元 汇总string功能的实现汇总测试代码 功能介绍 …

Vue3+.NET6前后端分离式管理后台实战(八)

1&#xff0c;Vue3.NET6前后端分离式管理后台实战(八)已经在订阅号发布有兴趣的可以关注一下&#xff01; 有兴趣的可以关注一下&#xff1a;

深入剖析Spring WebFlux:从MethodHandler到反射获取请求信息的源码之旅

文章目录 前言一、获取请求执行的类、方法信息二、获取请求url变量三、获取请求处理数据总结 前言 最近想写一个代办事项后台服务&#xff0c;底层&#xff0c;选型WebFlux。在操作层面上&#xff0c;针对部分操作&#xff0c;想在不侵入业务代码的前提下&#xff0c;记录操作…

泛型总结(擦除机制+泛型上界+通配符的上下界)

文章目录 泛型一、 什么是泛型1.能用于多种类型&#xff0c;把类型当做参数1.1 作用1.2 语法 二、擦除机制1. 为什么采用擦除机制实现泛型&#xff1f;向后兼容性 移植兼容性 2. 为什么不能使用“newT()”&#xff1f;3. 创建类型T的数组3.1 不安全的写法3.2 官方的写法 3. 3 正…

从0到1:兼职招聘小程序开发笔记(一)

可行性分析 兼职招聘小程序&#xff1a;为雇主和求职者提供便利的平台&#xff0c;旨在帮助雇主招聘兼职员工&#xff0c;并让求职者寻找合适的兼职工作。提供简单、快捷的方式来匹配兼职岗位和候选人&#xff0c;节省了招聘和求职的时间和精力。其主要功能模块包括&#xff1…

Cross Hyperspectral and LiDAR Attention Transformer

TGRS 2024&#xff1a;Cross Hyperspectral and LiDAR Attention Transformer: An Extended Self-Attention for Land Use and Land Cover Classification 题目 Cross Hyperspectral and LiDAR Attention Transformer: An Extended Self-Attention for Land Use and Land Cov…

安装mysql8,启动mysql服务日志 libstdc++.so.6: wrong ELF class: ELFCLASS32

背景&#xff1a;linux centos7.9安装mysql5.7版本&#xff0c;服务启动成功后被告知要求安装mysql8版本&#xff0c;故卸载之后安装mysql8&#xff0c;后启动mysql服务报错提示&#xff1a;libstdc.so.6: wrong ELF class: ELFCLASS32 解决办法&#xff1a; 1、下载安装包li…

LeetCode Python - 81. 搜索旋转排序数组 II

目录 题目描述解法运行结果 题目描述 已知存在一个按非降序排列的整数数组 nums &#xff0c;数组中的值不必互不相同。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转 &#xff0c;使数组变为 […

屌爆了,我不懂音乐,但AI让我一天完成原创专辑制作

前言 作为一个完全不懂音乐的程序员&#xff0c;我从未想象过自己能够踏入音乐创作的领域。然而&#xff0c;借助AI的力量&#xff0c;我竟然实现了制作一张完整专辑的梦想&#xff0c;而整个过程不过一天时间。从写词到生成音频&#xff0c;再到制作MV&#xff0c;每首歌曲仅需…

PHP在线客服系统源码修复版

源码简介 在线客服系统网站源码https://www.888host.cn/330.html 新增消息预知&#xff0c;消息撤回&#xff0c;消息已读未读&#xff0c; 修复需要刷新才能收到消息 修复客户来源地址 修复消息提示音 修复桌面推送提醒 搭建环境 宝塔面板 &#xff0c;Nginx1.16-1.18 …

什么是检索增强生成(Retrieval-Augmented Generation,RAG)

什么是RAG&#xff1f; 检索增强生成&#xff08;Retrieval-Augmented Generation&#xff0c;RAG&#xff09;&#xff0c;是指为大模型提供外部知识源的概念。能够让大模型生成准确且符合上下文的答案&#xff0c;同时能够减少模型幻觉。 用最通俗的语言描述&#xff1a;在已…

第十四届蓝桥杯软件赛省赛C/C++ C组 思路讲解与参考代码

A. 求和&#xff1a; 问题描述 求 11 &#xff08;含&#xff09;至 2023040820230408 &#xff08;含&#xff09;中每个数的和。 思路&#xff1a;等差数列&#xff0c;d位1&#xff0c;Sn &#xff08;a1an&#xff09;*n/2; 参考代码&#xff1a; #include <iost…

动态规划-----背包类问题(0-1背包与完全背包)详解

目录 什么是背包问题&#xff1f; 动态规划问题的一般解决办法&#xff1a; 0-1背包问题&#xff1a; 0 - 1背包类问题 分割等和子集&#xff1a; 完全背包问题&#xff1a; 完全背包类问题 零钱兑换II: 什么是背包问题&#xff1f; 背包问题(Knapsack problem)是一种…

obspy安装

最近在安装obspy时经常&#xff0c;试了各种方法 conda install obspy pip install obspy 发现都没有办法&#xff0c;包括选择了很多镜像源。 C: \Users admin>conda config -add channels https://mirrors. sustech. edu. cn/anaconda/cloud/biocondal (base)C:\Users…

qtcreator的信号槽链接

在ui文件中简单创建一个信号槽连接并保存可以在ui_mainwindow.h下 class Ui_MainWindow 类 void setupUi(QMainWindow *MainWindow)函数 找到对应代码 QObject::connect(pushButton, SIGNAL(clicked()), MainWindow, SLOT(close())); 下拉&#xff0c;由于 class MainWind…

书生·浦语大模型实战营之全链路开源体系

书生浦语大模型实战营之全链路开源体系 为了推动大模型在更多行业落地开花&#xff0c;让开发者们更高效的学习大模型的开发与应用&#xff0c;上海人工智能实验室重磅推出书生浦语大模型实战营&#xff0c;为广大开发者搭建大模型学习和实践开发的平台&#xff0c;两周时间带…

按大小顺序输出任一三个数据(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//实现比较函数&#xff1b; int Compare(int a, int b, int c) {//比较a,c的大小&#xff1b;if (a < c){//输出结果&#xff1b;printf("%d > %d &…

如何关闭win10防火墙,怎么关闭win10防火墙通知

Windows10系统自带了防火墙功能,可以有效阻止病毒软件入侵,一般情况下是默认开启的。但是有时候我们下载一些软件,或使用某些功能时,就需要提前将它关闭,以免防火墙阻止正常运作。那么如何关闭win10防火墙呢?网上介绍关于win10系统关闭防火墙的处理方法比较零散,这里小编…

共享办公室行业面临的最大挑战是什么,未来有哪些可能的发展方向

共享办公室行业虽然发展迅速&#xff0c;但也面临着一些挑战和需要解决的问题。咱们来聊聊这行业的最大挑战和未来可能的发展方向。 面临的最大挑战&#xff1a; 市场竞争加剧&#xff1a;随着共享办公室的火热&#xff0c;越来越多的玩家进入市场&#xff0c;竞争变得异常激烈…

安装部署MariaDB数据库管理系统

目录 一、初始化MariaDB服务 1、安装、启动数据库服务程序、将服务加入开机启动项中。 2、为保证数据库安全性和正常运转&#xff0c;需要对数据库程序进行初始化操作。 3、配置防火墙&#xff0c;放行对数据库服务程序的访问请求&#xff0c;允许管理员root能远程访问数据…