10_Stream

CentOS Stream10 设置阿里云源 阅读详情

Stream

认识 Stream 流

首先我们需要有一个数据源,然后才能获取 Stream 流,它代表一条流水线,并能与数据源建立连接,然后我们能够通过这条流水线的各个方法对数据进行处理、计算。

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

public class Test {
    public static void main(String[] args) {
        List<String> lst = new ArrayList<>();
        Collections.addAll(lst, "java1", "Java2", "Java3", "java4", "JAVA5");
        System.out.println(lst);  // [java1, Java2, Java3, java4, JAVA5]

        // 使用普通for循环的方式解决
        List<String> lst2 = new ArrayList<>();
        for (String s : lst) {
            if (s.startsWith("Java") && s.length() >= 4) {
                lst2.add(s);
            }
        }
        System.out.println(lst2);  // [Java2, Java3]

        // 使用 Stream 流来解决这个问题
        List<String> lst3 = lst.stream().filter(s -> s.startsWith("Java"))
                .filter(s -> s.length() >= 4).collect(Collectors.toList());

        System.out.println(lst3);  // [Java2, Java3]

    }
}
获取 Stream 流
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Test {
    public static void main(String[] args) {
        // 1. 如何获取List集合的Stream流?
        List<String> lst = new ArrayList<>();
        Collections.addAll(lst, "Java1", "Java2", "java3", "java4");
        Stream<String> stream1 = lst.stream();

        // 2. 如何获取Set集合的Stream流
        Set<String> set = new HashSet<>();
        Collections.addAll(set, "java1", "java2", "Java3", "Java4");
        Stream<String> stream2 = set.stream();
        stream2.filter(s -> s.contains("Java")).forEach(s -> System.out.println(s));  // Java3  Java4

        // 3. 如何获取Map集合的Stream流
        Map<String, Double> map = new HashMap<>();
        map.put("java1", 8.5);
        map.put("java2", 9.3);
        map.put("java3", 7.2);
        map.put("python1", 7.4);
        map.put("python2", 9.6);

        // 获取键的 Stream 流
        Set<String> keys = map.keySet();
        Stream<String> ks = keys.stream();

        // 获取值的 Stream 流
        Collection<Double> values = map.values();
        Stream<Double> vs = values.stream();

        // 获取"键值对"整体的 Stream 流
        Set<Map.Entry<String, Double>> entries = map.entrySet();
        Stream<Map.Entry<String, Double>> kvs = entries.stream();
        kvs.filter(e -> e.getKey().contains("j"))
                .filter(e -> e.getValue() > 8.5).forEach(s -> System.out.println(s));  // java2=9.3

        // 4. 如何获取数组的Stream流
        String[] arr = {"Java1", "Java2", "java3", "java4"};
//      Stream<String> stream = Arrays.stream(arr);  // 方法一
        Stream<String> stream = Stream.of(arr);  // 方法二
    }
}
Stream 流的中间方法
import java.util.*;
import java.util.stream.Stream;

public class Test {
    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.5, 25.0);
        // 需求1. 找出成绩大于等于60分的数据,并升序后,再输出
        // sorted():升序
        scores.stream().filter(s -> s >= 60).sorted().forEach(e -> System.out.println(e));
        System.out.println("-----------------------------");


        // 准备一些对象
        List<Student> lst = new ArrayList<>();
        Student s1 = new Student("Jack", 26, 96.8);
        Student s2 = new Student("Peter", 19, 48.2);
        Student s3 = new Student("Tony", 33, 52.7);
        Student s4 = new Student("Tomato", 28, 99.4);
        Student s5 = new Student("Tomato", 28, 99.4);
        Collections.addAll(lst, s1, s2, s3, s4, s5);

        // 需求2. 找出年龄大于等于23,且年龄小于等于30岁的学生,并按照年龄降序输出
        // sorted() + lambda表达式实现自定义排序
        lst.stream().filter(s -> s.getAge() >= 23).filter(e -> e.getAge() <= 30)
                .sorted((o1, o2) -> o2.getAge() - o1.getAge()).forEach(k -> System.out.println(k));
        System.out.println("-----------------------------");


        // 需求3. 取出身高最高的前3名学生,并输出
        // limit():取前面几个
        lst.stream().sorted((o1, o2) -> Double.compare(o2.getHeight(), o1.getHeight()))
                .limit(3).forEach(s -> System.out.println(s));
        System.out.println("-----------------------------");


        // 需求4. 取出身高倒数的2名学生,并输出
        // skip():跳过前面多少个
        lst.stream().sorted((o1, o2) -> Double.compare(o2.getHeight(), o1.getHeight()))
                .skip(lst.size() - 2).forEach(System.out::println);  // System.out::println 的本质就是 s -> System.out.println(s)
        System.out.println("-----------------------------");


        // 需求5. 找出身高超过98的学生叫什么名字,要求去除重复的名字,再输出
        // map():映射,本例中map()将对象映射成对象的名字
        // distinct():去除重复的
        lst.stream().filter(s -> s.getHeight() > 98).map(s -> s.getName())
                .distinct().forEach(s -> System.out.println(s));
        System.out.println("-----------------------------");

        // distinct()去除重复,但是对于自定义的对象,如果希望对象内容一样就认为是重复,需要重写hashCode与equals方法
        lst.stream().filter(s -> s.getHeight() > 98).distinct().forEach(s -> System.out.println(s));
        System.out.println("-----------------------------");


        // 需求6. 合并 Stream 流
        Stream<String> stream1 = Stream.of("Jack", "Peter");
        Stream<String> stream2 = Stream.of("Jack2", "Peter2", "Tomato");
        Stream<String> stream3 = Stream.concat(stream1, stream2);
        stream3.forEach(System.out::println);  // 本质就是 stream3.forEach(s -> System.out.println(s))

    }
}

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

    // 重写 hashCode 与 equals 方法


    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age && Double.compare(student.height, height) == 0 && Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age, height);
    }

    public Student() {

    }

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

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", 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;
    }
}
Stream 流的终结方法
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Test {
    public static void main(String[] args) {
        // 准备一些对象
        List<Student> lst = new ArrayList<>();
        Student s1 = new Student("Jack", 26, 96.8);
        Student s2 = new Student("Peter", 19, 48.2);
        Student s3 = new Student("Tony", 33, 52.7);
        Student s4 = new Student("Tomato", 28, 99.4);
        Student s5 = new Student("Tomato", 28, 99.4);
        Collections.addAll(lst, s1, s2, s3, s4, s5);

        // 需求1. 请计算出身高超过98的学生人数
        // count():计算
        long num = lst.stream().filter(s -> s.getHeight() > 98).count();
        System.out.println(num);
        System.out.println("-----------------------------");


        // 需求2. 请找出身高最高的学生对象,并输出
        // max():取最大,如果是自定义对象,请重写并使用 lambda 表达式
        // get():获取当前 Stream 流的内容
        Student obj1 = lst.stream().max((o1, o2) -> Double.compare(o1.getHeight(), o2.getHeight())).get();
        System.out.println(obj1);
        System.out.println("-----------------------------");


        // 需求3. 请找出身高最矮的学生对象,并输出
        // skip():跳过前面多少个
        Student obj2 = lst.stream().min((o1, o2) -> Double.compare(o1.getHeight(), o2.getHeight())).get();
        System.out.println(obj2);
        System.out.println("-----------------------------");

        // 收集 Stream 流:就是把 Stream 流操作后的结果转回到集合或者数组中
        // 需求4. 请找出身高超过98的学生对象,并放到一个新集合中去返回
        List<Student> lst2 = lst.stream().filter(a -> a.getHeight() > 98).collect(Collectors.toList());
        System.out.println(lst2);

        Set<Student> set = lst.stream().filter(a -> a.getHeight() > 98).collect(Collectors.toSet());
        System.out.println(set);
        System.out.println("-----------------------------");

        // 需求5. 请找出身高超过170的学生对象,并把学生对象的名字和身高,存入到一个Map集合返回
        Map<String, Double> map = lst.stream().filter(k -> k.getHeight() > 98)
                .distinct().collect(Collectors.toMap(k -> k.getName(), k -> k.getHeight()));
        // 上面的做法是:使用对象的名字作为key,对象的身高作为value,所有名字重复的对象,一定要用distinct()剔除,不然报错
        System.out.println(map);

//      Object[] arr = lst.stream().filter(k -> k.getHeight() > 98).toArray();
        Student[] arr = lst.stream()
                .filter(k -> k.getHeight() > 98).toArray(Student[]::new);  // e -> new Student[e]
        System.out.println(arr[0]);

    }
}

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

    // 重写 hashCode 与 equals 方法


    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age && Double.compare(student.height, height) == 0 && Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age, height);
    }

    public Student() {

    }

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

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", 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;
    }
}
海康线扫相机平场矫正教程 1、白纸准备确保视野中有一张平整且无折痕的白纸,使其完全铺满相机的整个视野。2、行高设置将行高参数设定为 2048。3、灰度值控制相机端图像的灰度值应维持在 120 - 160 这个区间内。同时,最亮像素点与最暗像素点的灰度值差值不得超过 4 倍。在调整灰度值时,尽量开启增益功能。4、 图像模糊处理为减少白纸对平场矫正的影响,需将相机端获取的图像进行模糊化处理。具体操作是对镜头进行虚焦,使整体图像变得模糊。 阅读详情

相关推荐

研究生如何快速发CVPR

研究生如何快速发CVPR,找到科研方向

python_vb的博客 785

CentOS Stream10的系统初始化

centos stream 10系统初始化

u013901725的博客 1223

DINOv2 基于自定义数据集进行图片分类预测

(前提是安装好pytorch)1. pip安装2. 下载dinov2提供的预训练模型,需要自行前往网站上查找dinov2模型进行下载。模型需要下载三个文件:下载完成后将上述三个文件放置在本地一个名为dinov2_base的文件夹中即可。

sinat_34770838的博客 6665

Centos10 Stream 基础配置

只要把这条命令写到对应的文件末尾(上面两个文件地址),就能长期修改环境变量,然后通过source命令使对应的文件生效。还有一个ssh_congfig文件,这个是ssh客户端的配置文件。使用方法比较简单,直接看步骤。下面有很多可以修改的选项。

Tyrant的博客 3072

网络安全隔离技术解析:单向网闸与双向网闸的核心差异与应用场景

本文深入解析网络安全隔离技术中的单向网闸与双向网闸,详细比较两者的核心差异与应用场景。单向网闸通过物理隔离确保数据单向流动,适用于金融交易等高风险场景;双向网闸则支持严格安检的双向数据交互,常见于医疗、政务等领域。文章还提供了选型建议和技术发展趋势,帮助读者根据安全需求和业务场景选择最适合的网闸解决方案。

weixin_29323365的博客 527

学Simulink--基于风力发电系统的场景实例:海上风电场在复杂海况下的动态响应仿真

本实例将创建一个针对海上风电场在复杂海况下的动态响应模型。该模型不仅考虑了不同风速条件的影响,还引入了波浪和水流对风机塔架及基础结构的影响。通过仿真验证系统的有效性,并探索最佳控制参数设置以提高整体性能和稳定性。本教程展示了如何在Simulink中实现一个海上风电场在复杂海况下的动态响应仿真模型,并分析其性能。通过这种方式,我们不仅可以验证所提出的技术手段在提高海上风电场稳定性和效率方面的有效性,还能进一步探索优化参数以适应特定的应用场景。

xiaoheshang_123的博客 167

Centos-9-Stream升级Centos-10-Stream教程

添加UEFI启动项(注意/dev/nvme0n1为efi分区所在磁盘,需根据实际情况自行选择磁盘路径,具体参考上图,-p后面是分区位置(默认为1),efi分区为/dev/nvme0n1p1值就是1,efi分区为/dev/nvme0n1p2值就是2)下面的命令是迁移后找不到引导、重启开不了机等情况,可以用系统安装盘进入修复,根据以下命令选择分区表类型,根据分区表类型执行相关命令。MBR分区(传统的BIOS、dos、msdos)(注意/dev/nvme0n1需根据实际情况自行选择磁盘路径,具体参考上图)

a15969091614的博客 1343

解锁激光加工密码:功率、频率、脉宽、占空比全解析

激光加工利用高能量激光束实现材料加工,具有无接触、高效率等特点。其核心参数包括功率(决定能量输出)、频率(控制脉冲重复)、脉宽(调节能量作用时间)和占空比(调控工作周期),这些参数相互协同影响加工效果。针对不同材料需采用差异化参数组合:金属材料需较高功率,塑料需低功率防过热,陶瓷需高频短脉宽减少热应力。实际操作中应通过小范围测试逐步优化参数,并注意解决烧损、切割不平整等常见问题。合理调节这些参数可实现高质量、高效率的激光加工。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 614

CentOS Stream10 设置固定ip

CentOS Stream10 设置固定ip

u013901725的博客 4882

图解联合概率密度、边缘概率密度、条件概率密度之间的关系

简要图解联合概率密度、边缘概率密度、条件概率密度之间的关系

一个搬运知识的笨小孩 2万+

05 SAP CPI 访问第一个CPI接口

其中的clientid的值可作为Basic验证的用户名,clientsecret的值可作为Basic验证的密码。点击SEND按钮,可看见返回状态为200 OK。在04中,我们得到TOKEN令牌。POSTMAN向下滚动。点击按钮获取token。

SAP CPI 662

Centos Stream 10 测试版下载:未来的RHEL10&Rocky Linux 10

最近发现Centos最放出了Stream 10 测试版本,应该是基于Fedora 40构建的。未来红帽会基于此版本构建RHEL 10。内核版本:6.9.0Python版本:3.12.2more。

网工格物的博客 1185

【OpenClaw从入门到精通】第05篇:实战!OpenClaw自动化搞定邮件/日历/文件管理(2026实测避坑版)

本文聚焦OpenClaw核心实用场景,手把手教你实现邮件、日历、文件管理的全自动化。通过安装三大核心技能,配置IMAP/SMTP邮箱、跨平台日历及文件沙盒权限,结合4个虚拟实战案例,演示从邮件自动摘要、会议冲突预警到下载文件夹分类的完整流程。文中包含2026实测的命令代码、配置步骤、排障方案,所有案例需在测试环境验证,代码未上传GitHub。兼顾新手入门与进阶需求,让OpenClaw从“能聊天”升级为“能干活”,帮你节省80%重复工作时间。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2674

VMware安装CentOS Stream10

如何在VMware中安装CentOS Stream 10操作系统的步骤。首先,从官方网站下载ISO文件,然后在VMware中创建新虚拟机并指定下载的ISO文件。安装过程中包括选择安装选项、配置语言、设置安装源、选择软件包、配置KDUMP、确定安装位置、设置网络和主机名、启用并设置ROOT账户密码等步骤。安装完成后,系统会重启并完成引导配置。最后,通过xshell连接并测试网络连接,安装成功。

while(life)++; 1913

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

centos Stream 10安装nginx

centos stream 10安装nginx

u013901725的博客 749

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

CentOS Stream10 禁用ipv6

centos stream10 禁用ipv6

u013901725的博客 364

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

(新)VMware虚拟机安装CentOS Stream 10教程(超详细)

全网最新最详细的VMware安装CentOS Stream 10的教程。

我这孩子从小记性就不好,什么东西都要写下来才放心 6473

【Linux基础】CentOS Stream10详细安装教程

本文详细指导了如何从镜像源下载CentOS10,包括选择镜像、在VMwareWorkstation中创建虚拟机并安装CentOS,以及配置环境。

qq_45695920的博客 2205

Java 8 中创建 Stream 的 10 种方式

** Java 8 中创建 Stream 的 10 种方式 ** import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.*; import java.util.regex.Pattern; import java.util.stream.Stream; import static java.util.stream.Collectors.joining; pu

weixin_45156610的博客 361

安装CentOS Stream 10版本的Linux虚拟机

最新发布的stream10版本特性介绍以及安装

soso678的博客 9401

CentOS Stream10安装docker ce

CentOS Stream 10 安装 Docker CE 的最新方法。搜索网页89 个结果根据官方文档和最新资料,以下是。

leijmdas的专栏 692

CentOS Stream 10 正式 GA!

戳下方名片,关注并星标!回复“1024”获取2TB学习资源!????体系化学习:运维工程师打怪升级进阶之路 4.0— 特色专栏—MySQL/PostgreSQL/MongoDBElasticSearch/Hadoop/RedisKubernetes/Docker/DevOpsKafka/RabbitMQ/Zookeeper监控平台/应用与服务/集群管理N...

民工哥的博客 1078

Java 8 创建 Stream 的 10 种方式,我保证你受益无穷!

Java技术栈www.javastack.cn优秀的Java技术公众号之前栈长分享过 Java 8 一系列新特性的文章,其中重点介绍了 Stream。获取上面这份 Jav...

Java技术栈,分享最主流的Java技术 1541

CentOS Stream10 baseos下载元数据失败

旧的 vault.centos.org 路径不再适用,而国内华为云等镜像已同步最新结构,稳定性更高。按上述步骤操作后,仓库可正常访问。sudo rm -rf /var/cache/dnf # 彻底删除缓存目录。CentOS Stream 10 的仓库结构在 2024 年后进行了调整。1. 彻底替换仓库配置(使用官方推荐的 Stream 10 源)最终解决方案:使用 CentOS Stream 官方最新仓库。3. 若仍失败:改用国内同步源(如华为云,已验证有效)2. 强制清理缓存并重建(忽略旧仓库残留)

weixin_46614660的博客 832

Win10安装Centos8 Stream

1、双系统,先下载Centos8 stream镜像 http://isoredirect.centos.org/centos/8-stream/isos/x86_64/CentOS-Stream-x86_64-dvd1.iso 2、用rufus将镜像制作到U盘 3、电脑重启,在BIOS设置从USB设备启动,安装Centos8; 由于个人是128G SSD和1T SATA盘,win10安装在...

changxiaoshen的博客 4768

centos stream 10 修改 metric

手动编辑 NetworkManager 的配置文件来修改。目录下,文件名与网络连接的 UUID 相对应。值越大,优先级越低,多网络用的到。以编辑 IPv4 的。

mihaoyun.com的专栏 773
上一篇: 09_Map集合
下一篇: 11_File
code_stream
博客等级 码龄4年 1238粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值