Java进阶13讲__第九讲

news2024/9/23 17:24:55

Stream流 

1. 案例初体验

package cn.hdc.oop9.stream.using;

import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class t1 {
    public static void main(String[] args) {
        LinkedList<String> list = new LinkedList<>();
        LinkedList<String> l1 = new LinkedList<>();
        list.add("wsn");
        list.add("wzn");
        list.add("wyr");
        list.add("jsz");
        list.add("zqy");
//        需求:把w开头的且长度为3的元素存储到一个新的集合
//        使用Stream前
        list.forEach(item -> {
            if (item.length() == 3 && item.charAt(0) == 'w') {
                l1.add(item);
            }
        });
        System.out.println(l1);
//        使用Stream后
        List<String> l = list.stream()
                .filter(item -> item.startsWith("w"))
                .filter(item -> item.length() == 3)
                .collect(Collectors.toList());
        System.out.println(l);
    }
}

2. 什么是Stream?

3. 使用步骤

3.1 获取Stream流

 3.1.1 代码试用
package cn.hdc.oop9.stream.api;

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

public class t1 {
    public static void main(String[] args) {
        //1、如何获取List集台的Stream流:
        List<String> names = new ArrayList<>();
        Collections.addAll(names, "张三丰", "张无忌", "周芷若", "赵敏", "张强");
        Stream<String> s1 = names.stream();
        //2、如何获取Set集合的stream流?
        Set<String> set = new HashSet<>();
        Collections.addAll(set, "刘德华", "张受玉", "蜘蛛精", "马德", "德玛西亚");
        Stream<String> s2 = set.stream();
        s2.filter(item -> item.contains("德")).forEach(item -> System.out.println(item));
        //3、如何获取Map集合的stream流?
        Map<String, Double> map = new HashMap<>();
        map.put("古力娜扎", 172.3);
        map.put("迪丽热巴", 168.3);
        map.put("马尔扎哈", 166.3);
        map.put("卡尔扎巴", 168.3);
        Stream<String> s3 = map.keySet().stream();
        Stream<Double> s4 = map.values().stream();
        Stream<Map.Entry<String, Double>> s5 = map.entrySet().stream();
        s5.filter(item -> item.getKey().contains("巴")).forEach(item -> System.out.println(item));
        //4.如何获取数组的Stream流
        String[] names2 = {"张翠山", "东方不败", "唐大山", "独孤求败"};
        Arrays.stream(names2).filter(item -> item.contains("山")).forEach(item -> System.out.println(item));
        Stream.of(names2).filter(item -> item.length() > 3).forEach(item -> System.out.println(item));
    }
}

3.2 Stream中间方法

3.2.1 什么是中间方法

 3.2.2 常见中间方法

 3.2.3 代码试用
package cn.hdc.oop9.stream.api;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Stream;

public class t2 {
    public static void main(String[] args) {
        List<Double> scores = new ArrayList<>();
        Collections.addAll(scores, 88.5, 100.0, 60.0, 99.0, 9.5, 99.6, 25.0);
        //需求1:找出成绩大于等于60分的数据,并升序后,再输出。
        scores.stream().filter(item -> item >= 60).sorted().forEach(item -> System.out.println(item));
        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.3);
        Student s6 = new Student("牛夫人", 34, 168.5);
        Collections.addAll(students, s1, s2, s3, s4, s5, s6);
        //需求2:找出年龄大于等于23,且年龄小于等于30岁的学生,并按照年龄降序输出
        students.stream().filter(item -> item.getAge() >= 23 && item.getAge() <= 30).sorted((o1, o2) -> Integer.compare(o2.getAge(), o1.getAge())).forEach(item -> System.out.println(item));
        System.out.println();
        //需求3:取出身高最高的前3名学生,并输出。
        students.stream().sorted((o1, o2) -> Double.compare(o2.getHeight(), o1.getHeight())).limit(3).forEach(item -> System.out.println(item));
        System.out.println();
        //需求4:取出身高倒数的2名学生,并输出。
        students.stream().sorted((o1, o2) -> Double.compare(o1.getHeight(), o2.getHeight())).limit(2).forEach(item -> System.out.println(item));
        System.out.println();
        //需求5:找出身高超过168的学生叫什么名字,要求去除重复的名字,再输出。
        students.stream().filter(item -> item.getHeight() > 168).map(item -> item.getName()).distinct().forEach(item -> System.out.println(item));
        System.out.println();
        //需求6:流合并
        Stream<String> st1 = Stream.of("张三", "李四");
        Stream<String> st2 = Stream.of("张三2", "李四2", "王五");
        Stream.concat(st1, st2).forEach(System.out::println);
    }
}

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

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", height=" + 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;
    }
}

3.3 Stream终结方法

3.3.1 什么是终结方法

3.3.2 常见的终结方法
 3.3.3 代码试用
package cn.hdc.oop9.stream.api;

import java.util.*;

public class t3 {
    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.3);
        Student s6 = new Student("牛夫人", 34, 168.5);
        Collections.addAll(students, s1, s2, s3, s4, s5, s6);
        // 需求1:请计算出身高超过168的学生有几人。
        long count = students.stream().filter(item -> item.getHeight() > 168).count();
        System.out.println(count);
        System.out.println();
        // 需求2:请找出身高最高的学生对象,并输出。
        Student max = students.stream().max((o1, o2) -> Double.compare(o1.getHeight(), o2.getHeight())).get();
        System.out.println(max);
        // 需求3:请找出身高最矮的学生对象,并输出。
        Student min = students.stream().min(Comparator.comparingDouble(Student::getHeight)).get();
        System.out.println(min);
    }
}
3.3.4 收集Stream流 

3.3.5 代码试用
package cn.hdc.oop9.stream.api;

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

public class t3 {
    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.3);
        Student s6 = new Student("牛夫人", 34, 168.5);
        Collections.addAll(students, s1, s2, s3, s4, s5, s6);
        // 需求4:请找出身高超过170的学生对象,并放到一个新集合中去返回。
        List<Student> l1 = students.stream().filter(item -> item.getHeight() > 170).collect(Collectors.toList());
        Set<Student> l2 = students.stream().filter(item -> item.getHeight() > 170).collect(Collectors.toSet());
        System.out.println(l1);
        System.out.println(l2);
        // 需求5:请找出身高超过170的学生对象,并把学生对象的名字和身高,存入到一个Map集合返回
        Map<String, Double> map = students.stream().filter(item -> item.getHeight() > 170).distinct().collect(Collectors.toMap(item -> item.getName(), item -> item.getHeight()));
        System.out.println(map);
        // 需求6:请找出身高超过170的学生对象,并把学生对象存入到一个数组返回
        Object[] arr = students.stream().filter(item -> item.getHeight() > 170).toArray();
        Student[] arr1 = students.stream().filter(item -> item.getHeight() > 170).toArray(len -> new Student[len]);
        System.out.println(Arrays.toString(arr));
        System.out.println(Arrays.toString(arr1));
    }
}

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

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

相关文章

认知杂谈30

今天分享 有人说的一段争议性的话 I I 《豁然开朗&#xff1a;男性成长的关键转折》 在男人的人生旅程当中啊&#xff0c;最金贵的可不是那些让人眼馋的钱财啥的&#xff0c;也不是啥惊天动地的事儿&#xff0c;更不是偶尔碰到的贵人帮忙。真正无价的宝贝呢&#xff0c;是在…

培训第四十一天(docker-compose一键部署项目,haproxy容器代理多个web或java容器)

# 创建脚本&#xff0c;可以在java环境中运行任何的jar包或者war包#!/bin/bash/usr/local/jdk/bin/java -jar /java/src/*.?ar 一、思路分析&#xff1a; &#xff08;1&#xff09;nginx 1、下载镜像&#xff0c;将本地的dist项目的目录挂载在容器的/usr/share/nginx/html…

论文解读:Visual Prompt Tuning

Comment: ECCV2022 摘要 当前调整预训练模型的方法需要更新backbone的全部参数&#xff0c;即完全微调。本文提出了一种高效的方法VPT&#xff0c;成为视觉中大规模transformer模型完全微调的替代方案。从微调大规模语言模型中吸取经验&#xff0c;VPT仅在输入空间中引入少数…

【C语言】通讯录的实现(详解)

通讯录的实现 主要用到的知识&#xff1a; 1.结构体相关知识 2.枚举 3.多文件 在学习完结构体和枚举后就可以利用学过的知识去实现一个通讯录了 1.通讯录要求 用C语言所学知识实现下面这样一个通讯录 1.通讯录100个联系人 2.姓名 性别 年龄 电话 地址 3.添加联系人 4.删除指…

SQL server数据库实现远程跨服务器定时同步传输数据

项目背景 公司新建项目&#xff0c;需要访问生产数据&#xff0c;但是规定不能直接访问生产数据库服务器&#xff0c;所以得考虑通过中间库的形式实现。经过评估项目需求 &#xff0c;以及当前拥有的环境。 需求&#xff1a; 1.用户不需要实时获取生产数据 2.用户只需要指定的…

Python青少年简明教程:函数

Python青少年简明教程&#xff1a;函数 在Python中&#xff0c;函数是一段可重用的代码块&#xff0c;用于执行特定的任务。函数能够接受输入参数&#xff0c;执行特定的操作&#xff0c;并返回结果。 Python提供了许多内置函数&#xff0c;如print()、len()、eval()等&#x…

Java基于微信小程序的校园兼职小程序

博主介绍&#xff1a;✌stormjun、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…

shadertoy-sdf 操作

vec3 col getBackgroundColor(uv); float d1 sdCircle(uv, 0.1, vec2(0., 0.)); float d2 sdSquare(uv, 0.1, vec2(0.15, 0));float res; // result1、union res min(d1, d2); // union2、intersection res max(d1, d2); // intersection3、subtraction res max(-d1, d…

Python实战案例数据合并订单表和商品价格表数据

有如下数据&#xff0c;订单表和商品价格表&#xff0c;进行数据合并&#xff0c;输出客户需要的效果。 数据样例&#xff1a;&#x1f447; 订单表: 商品价格表: 最终效果&#xff1a; 01实现思路 目的是将订单数据和商品价格数据按照商品id和时间进行匹配&#xff0c;以…

基于nodejs+vue+uniapp的学习资料销售平台小程序

开发语言&#xff1a;Nodejs框架&#xff1a;expressuniapp数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;VS Code 系统展示 管理员登录 管理员主界面 用户管理 学习资料管理 订单管理 系统管理 用户…

未来已来:2024年远程控制行业的新星工具推荐

个人用户对于设备管理的便捷需求&#xff0c;远程控制软件都以其独特的优势&#xff0c;搭建起一座座沟通的桥梁。今天&#xff0c;我们就来探索一款集高效性、安全性与易用性于一体的远程控制软件。为了软件得到的方便我会介绍比如能从向日葵远程控制官网、TD官网、GH官网能直…

用RPC Performance Inspector 优化你的区块链

目录 什么是RPC&#xff1f; RPC Performance Inspector 是做什么的&#xff1f; 为什么需要这个工具&#xff1f; 如何使用它&#xff1f; 适合谁用&#xff1f; 如何使用&#xff1f; 什么是RPC&#xff1f; RPC Performance Inspector 是一个专门用于测试和分析RPC性能…

C语言 动态内存管理 #动态内存函数的介绍 #常见的动态内存错误 #C\C++ 程序的内存开辟 #柔性数组

文章目录 前言 一、为什么存在动态内存分配 二、动态内存函数的介绍 1、malloc 2、free 3、calloc 4、realloc realloc 的工作原理&#xff1a; 三、常见的动态内存错误 1、对NULL指针的解引用操作 2、对动态开辟空间的越界访问 3、对非动态开辟的空间使用 free 来释…

数学建模强化宝典(8)粒子群算法

前言 粒子群算法&#xff08;Particle Swarm Optimization, PSO&#xff09;是一种基于群体智能的优化算法&#xff0c;它源于对鸟群捕食行为的研究。通过模拟鸟群中的个体相互协作和信息共享来寻找最优解&#xff0c;粒子群算法已被广泛应用于函数优化、神经网络训练、模糊系统…

跨地域工作利器:深度解析2024年远程控制软件的新特性

无论是跨地域的团队协作、技术支持&#xff0c;使用远程控制工具可以让距离不再是障碍。这次我介绍一些可以直接下载使用的远程工具&#xff0c;比如从向日葵远程控制官网&#xff0c;EV官网、TV官网等就能直接下载使用的工具。 1.向日葵远程控制 链接直通车&#xff1a;http…

微服务--Nacos

一、Nacos简介 Nacos&#xff08;Naming and Configuration Service&#xff09;是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它致力于帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos支持几乎所有主流类型的服…

惠中科技智能高效综合光伏清洗技术

惠中科技综合光伏清洗技术&#xff1a;&#xff0c;引领绿色清洁新时代 随着全球对可再生能源需求的不断增长&#xff0c;光伏产业作为绿色能源的重要组成部分&#xff0c;正迎来前所未有的发展机遇。然而&#xff0c;光伏电站的广泛应用也带来了光伏板清洁维护的挑战。灰尘、…

SprinBoot+Vue问卷调查微信小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平…

AI耳机是不是好赛道

AI耳机是不是好赛道&#xff1f; 数科星球原创 作者丨苑晶 编辑丨大兔 AI硬件方兴未艾&#xff0c;行业里出现了新变化。 最近&#xff0c;AI耳机开始受到关注。有人将其看作可堪比无线蓝牙耳机革命的大时代&#xff0c;也有人认为其鸡肋无比、并不看好。询问了多家投资机…

Pr:项目设置 - 颜色

Pr菜单&#xff1a;文件/项目设置 File/Project Settings “项目设置”对话框中的颜色 Color选项卡主要用于管理项目的色彩空间和显示设置&#xff0c;确保在不同设备和环境下色彩显示的一致性和准确性&#xff0c;特别是处理 HDR 或对数格式的视频素材时。 颜色设置 Color Set…