当前位置: 首页 > news >正文

JAVA学习-Stream

Stream

        Stream也叫Stream流,是Jdk8开始新增的一套API (java.util.stream.*),可以用于操作集合或者数 组的数据。

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

案例:体验Strema流

import java.util.*;
import java.util.stream.Collectors;/*目标 : 初步体验Stream流的方便与快捷需求 : 把集合中所有以“张”开头,且是3个字的元素存储到一个新的集合。*/
public class StreamTest1 {public static void main(String[] args) {List<String> names = new ArrayList<>();Collections.addAll(names, "张三丰","张无忌","周芷若","赵敏","张强");ArrayList<String> newNames = new ArrayList<>();for (int i = 0; i < names.size(); i++) {String name = names.get(i);if (name.startsWith("张")&&name.length() == 3){newNames.add(name);}}System.out.println(newNames);//stream流List<String> list = names.stream().filter(name1 ->{return name1.startsWith("张") && name1.length() == 3;}).collect(Collectors.toList());System.out.println(list);}
}

 运行结果:

[张三丰, 张无忌]
[张三丰, 张无忌]Process finished with exit code 0

Stream流处理数据的步骤:

        先得到集合或者数组的Stream流。

        然后调用Stream流的方法对数据进行处理。

        获取处理的结果。

获取 集合 的Stream流使用下面方法:

default Stream<E> stream​() 获取当前集合对象的Stream流 

获取 数组 的Stream流使用下面方法:

public static <T> Stream<T> stream(T[] array) 获取当前数组的Stream流 public static<T> Stream<T> of(T... values)  获取当前接收数据的Stream流

示例:各种数组集合获取Stream演示:

import java.util.*;
import java.util.stream.Stream;/*目标:掌握Stream流的创建。1 单列集合获取Stream流2 双列集合获取Stream流3 数组获取Stream流4 同一种类型多个数据获取Stream流*/
public class StreamTest2 {public static void main(String[] args) {// 1、如何获取List集合的Stream流?List<String> names = new ArrayList<>();Collections.addAll(names, "张三丰","张无忌","周芷若","赵敏","张强");names.stream().forEach(s -> {System.out.println(s);});//        2 双列集合获取Stream流System.out.println("------------------------");HashMap<String, String> map = new HashMap<>();map.put("1","1");map.put("2","3");map.put("3","3");// 获取双列集合的Set集合Set<Map.Entry<String, String>> entrySet = map.entrySet();// 获取双列集合的Stream流entrySet.stream().forEach(st ->{System.out.println(st.getKey()+st.getValue());} );//        3 数组获取Stream流System.out.println("------------------------");String[] arr={"4","5","6"};// 获取数组的Stream流Arrays.stream(arr).forEach(s -> {System.out.println(s);});//        4 同一种类型多个数据获取Stream流System.out.println("------------------------");// 获取Stream流Stream.of("7","8","9").forEach(s -> {System.out.println(s);});}
}

运行结果:

张三丰
张无忌
周芷若
赵敏
张强
------------------------
11
23
33
------------------------
4
5
6
------------------------
7
8
9Process finished with exit code 0

Stream流常见的中间方法:

Stream<T> filter(Predicate<? super T> predicate) 
用于对流中的数据进行过滤Stream<T> sorted() 
对元素进行升序排序 Stream<T> sorted(Comparator<? super T> comparator) 
按照指定规则排序Stream<T> limit​(long maxSize) 
获取前几个元素Stream<T> skip​(long n) 
跳过前几个元素 Stream<T> distinct​() 
去除流中重复的元素<R> Stream<R> map​( Function<? super T,​? extends R> mapper) 
对元素进行加工,并返回对应的新流static <T> Stream<T> concat​(Stream a, Stream b)  
合并a和b两个流为一个流

演示代码:

import java.util.*;
import java.util.stream.Stream;/*目标:掌握Stream流提供的常见中间方法。Stream<T> filter(Predicate<? super T> predicate)	用于对流中的数据进行过滤。Stream<T> sorted()	对元素进行升序排序Stream<T> sorted(Comparator<? super T> comparator)	按照指定规则排序Stream<T> limit(long maxSize)	获取前几个元素Stream<T> skip(long n)	跳过前几个元素Stream<T> distinct()	去除流中重复的元素。<R> Stream<R> map(Function<T , R> mapper)	对元素进行加工,并返回对应的新流static <T> Stream<T> concat(Stream a, Stream b)	合并a和b两个流为一个流*/
public class StreamTest3 {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(s->{return s>=60;}).sorted().forEach(s-> System.out.print(s+" "));System.out.println(" ");System.out.println("---------------");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(student -> {return student.getAge()>=23&&student.getAge()<=30;}).sorted(new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {return o2.getAge()-o1.getAge();}}).forEach(student -> System.out.println(student));System.out.println("---------------");// 需求3:取出身高最高的前3名学生,并输出。students.stream().sorted(new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {return Double.compare(o2.getHeight(), o1.getHeight());}}).limit(3).forEach(student -> System.out.println(student));System.out.println("---------------");// 需求4:取出身高倒数的2名学生,并输出。students.stream().sorted(new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {return Double.compare(o2.getHeight(), o1.getHeight());}}).skip(students.size()-2).forEach(student -> System.out.println(student));System.out.println("---------------");students.stream().sorted(new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {return Double.compare(o1.getHeight(), o2.getHeight());}}).limit(2).forEach(student -> {System.out.println(student);});// 需求5:找出身高超过168的学生叫什么名字,要求去除重复的名字,再输出。System.out.println("---------------");students.stream().filter(s-> s.getHeight()>168).map(student -> student.getName()).distinct().forEach(s -> System.out.print(s+" "));System.out.println(" ");System.out.println("---------------");Stream.concat(scores.stream(),scores.stream()).forEach(s-> System.out.print(s+" "));}
}

运行结果:

60.0 88.5 99.0 99.6 100.0  
---------------
Student{name='蜘蛛精', age=26, height=172.5}
Student{name='蜘蛛精', age=26, height=172.5}
Student{name='白晶晶', age=25, height=169.0}
Student{name='紫霞', age=23, height=167.6}
---------------
Student{name='牛魔王', age=35, height=183.3}
Student{name='蜘蛛精', age=26, height=172.5}
Student{name='蜘蛛精', age=26, height=172.5}
---------------
Student{name='牛夫人', age=34, height=168.5}
Student{name='紫霞', age=23, height=167.6}
---------------
Student{name='紫霞', age=23, height=167.6}
Student{name='牛夫人', age=34, height=168.5}
---------------
蜘蛛精 白晶晶 牛魔王 牛夫人  
---------------
88.5 100.0 60.0 99.0 9.5 99.6 25.0 88.5 100.0 60.0 99.0 9.5 99.6 25.0 
Process finished with exit code 0

Stream流常见的终结方法:

void forEach​(Consumer action) 
对此流运算后的元素执行遍历 long count​() 
统计此流运算后的元素个数 Optional<T> max​(Comparator<? super T> comparator) 
获取此流运算后的最大值元素Optional<T> min​( Comparator<? super T> comparator) 
获取此流运算后的最小值元素//收集Stream流:就是把Stream流操作后的结果转回到集合或者数组中去返回。R collect​(Collector collector) 
把流处理后的结果收集到一个指定的集合中去 Object[] toArray() 
把流处理后的结果收集到一个数组中去

Collectors工具类提供了具体的收集方式:

public static <T> Collector toList​() 
把元素收集到List集合中 public static <T> Collector toSet​() 
把元素收集到Set集合中 public static  Collector toMap​(Function keyMapper , Function valueMapper) 
把元素收集到Map集合中 

演示代码:

import java.util.*;
import java.util.stream.Collectors;/*目标:Stream流的终结方法void forEach(Consumer action)	对此流运算后的元素执行遍历long count()	统计此流运算后的元素个数Optional<T> max(Comparator<? super T> comparator)	获取此流运算后的最大值元素Optional<T> min(Comparator<? super T> comparator)	获取此流运算后的最小值元素*/
public class StreamTest4 {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的学生有几人。System.out.println(students.stream().filter(student -> student.getHeight() > 168).count());// 需求2:请找出身高最高的学生对象,并输出。System.out.println(students.stream().max(new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {return Double.compare(o1.getHeight(), o2.getHeight());}}));// 需求3:请找出身高最矮的学生对象,并输出。System.out.println(students.stream().min(new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {return Double.compare(o1.getHeight(), o2.getHeight());}}));// 需求4:请找出身高超过170的学生对象,并放到一个新集合中去返回。List<Student> list = students.stream().filter(student -> student.getHeight() > 170).collect(Collectors.toList());System.out.println(list);Set<Student> set = students.stream().filter(student -> student.getHeight() > 170).collect(Collectors.toSet());System.out.println(set);// 需求5:请找出身高超过170的学生对象,并把学生对象的名字和身高,存入到一个Map集合返回。Map<String, Double> map = students.stream().filter(student -> student.getHeight() > 170).distinct().collect(Collectors.toMap((k) -> {return k.getName();},(v) -> {return v.getHeight();}));System.out.println(map);}
}

运行结果:

5
Optional[Student{name='牛魔王', age=35, height=183.3}]
Optional[Student{name='紫霞', age=23, height=167.6}]
[Student{name='蜘蛛精', age=26, height=172.5}, Student{name='蜘蛛精', age=26, height=172.5}, Student{name='牛魔王', age=35, height=183.3}]
[Student{name='牛魔王', age=35, height=183.3}, Student{name='蜘蛛精', age=26, height=172.5}]
{蜘蛛精=172.5, 牛魔王=183.3}Process finished with exit code 0

#学无止尽    #记录并分享我的学习日常

相关文章:

JAVA学习-Stream

Stream Stream也叫Stream流&#xff0c;是Jdk8开始新增的一套API (java.util.stream.*)&#xff0c;可以用于操作集合或者数 组的数据。 优势&#xff1a; Stream流大量的结合了Lambda的语法风格来编程&#xff0c;提供了一种更加强大&#xff0c;更加简单的方式 操作集合或者数…...

如何在同一个电脑配置多个jdk版本并随意切换

1.右键此电脑属性 2.点击高级系统配置 3.点击环境变量 4.进去后点击新建 变量名&#xff1a;JAVA_HOME_版本&#xff0c;来进行命名 变量值&#xff1a;jdk的路径即可&#xff0c;比如我的是D:\JAVA\JAVA11 5.创建完你所有的jdk版本之后接着新建 变量名&#xff1a;JAVA_HOME…...

网工_传输层协议概述

2025.02.19&#xff1a;网工老姜&小猿网学习笔记 第22节 传输层协议概述 2.1 进程之间的通信2.2 传输层的两个主要协议2.3 传输层的端口2.3.1 端口号 2.4 本章小结 2.1 进程之间的通信 前三层解决了数据从主机到主机的问题&#xff0c;也就是&#xff0c;我们现在已经可以把…...

《java面试宝典》之java多线程面试题

1&#xff1a;什么是线程&#xff1f; 轻量级的进程 2&#xff1a;线程的三个部分是&#xff1f; 处理机 代码 数据 3&#xff1a;为什么使用多线程 使UI响应更快 利用多处理器系统 简化建模 4&#xff1a;代码示例&#xff1a;Java中实现多线程的两种方式&#xff0c;包括如何…...

5款电脑健康状况监测软件

鲁大师&#xff1a;专业且免费&#xff0c;能检测电脑硬件配置&#xff0c;辨别硬件真伪&#xff0c;检查电脑病毒隐患。可一键清理系统垃圾&#xff0c;提升电脑性能。还能全程监护硬件状态&#xff0c;实时检测硬件温度变化&#xff0c;让用户轻松掌握电脑健康状况。360 安全…...

JWT令牌:实现安全会话跟踪与登录认证的利器

摘要&#xff1a;本文深入探讨了JWT令牌在实现会话跟踪和登录认证方面的应用&#xff0c;详细介绍了JWT令牌的概念、组成、生成与校验方法&#xff0c;以及在实际案例中如何通过JWT令牌进行会话跟踪和登录认证的具体实现步骤&#xff0c;为系统的安全认证机制提供了全面且深入的…...

uni-app/微信小程序接入腾讯位置服务地图选点插件

uni-app/微信小程序接入腾讯位置服务地图选点插件 0、常出现的错误及解决方法0.1插件未授权使用&#xff08;见步骤1&#xff09;0.2小程序类目不符合引用该类目插件的要求或主体类型不符合要求&#xff08;见步骤1&#xff09;0.3需要在app.json中声明permission scope.userLo…...

3款顶流云电脑与传统电脑性能PK战:START云游戏/无影云/ToDesk云电脑谁更流畅?

这里写目录标题 一、前言二、本地机器配置环境三、START云游戏/无影云/ToDesk云电脑配置对比3.1 START云游戏3.2 无影云个人版3.3 ToDesk云电脑 四、本地电脑与云电脑性能实战4.1 游戏场景体验4.1.1 本地电脑测试4.1.2 云电脑测试英雄联盟黑神话悟空其他游戏 4.2 主流设计场景体…...

WINUI——Background小结

在 ​​WinUI/UWP XAML​​ 中&#xff0c;Background&#xff08;或其他颜色属性&#xff09;支持 ​​多种颜色表示方式​​&#xff0c;包括以下三种主流格式&#xff1a; ​​1. RGB 十六进制&#xff08;不透明&#xff09;​​ ​​格式​​&#xff1a;#RRGGBB​​特点…...

公司内部自建知识共享的方式分类、详细步骤及表格总结,分为开源(对外公开)和闭源(仅限内部),以及公共(全员可访问)和内部(特定团队/项目组)四个维度

以下是公司内部自建知识共享的方式分类、详细步骤及表格总结&#xff0c;分为开源&#xff08;对外公开&#xff09;和闭源&#xff08;仅限内部&#xff09;&#xff0c;以及公共&#xff08;全员可访问&#xff09;和内部&#xff08;特定团队/项目组&#xff09;四个维度&am…...

cursor AI编辑器的详细使用

以下是Cursor AI编辑器的详细使用介绍&#xff0c;涵盖核心功能、安装配置、使用技巧、高级应用及常见问题解决方案&#xff0c;结合了多个权威来源的实践指南和最新技术动态&#xff1a; 一、Cursor AI简介与核心功能 定位与架构 Cursor是基于Visual Studio Code&#xff08;V…...

js逆向入门实战某某观察网响应数据解密

(base64解码 base64解码&#xff09;地址:aHR0cHM6Ly93d3cuc3dndWFuY2hhLmNvbS9ob21lL2NpdHktZGV0YWlsP2NvZGU9MzEwMTAw 分析过程 1.抓数据包&#xff0c;发现响应数据是加密字符串。 ​ 2.对于这种回显数据解密&#xff0c;大概率通过拦截器实现&#xff0c;搜索intercepto…...

Ubuntu安装yum遇到Package ‘yum‘ has no installation candidate

环境说明 Window11&#xff0c;WSL2&#xff0c;Ubuntu24.04 错误描述 rootLAPTOP:~# apt-get install yum Reading package lists... Done Building dependency tree... Done Reading state information... Done Package yum is not available, but is referred to by anot…...

爱普生SG3225EEN低抖动差分晶振在网络通信的应用

在当今数字化时代&#xff0c;网络通信的飞速发展对数据传输的准确性、稳定性和高效性提出了极为严苛的要求。从 5G 通信网络的大规模部署&#xff0c;到数据中心的海量数据交换&#xff0c;再到智能家居系统的互联互通&#xff0c;每一个环节都离不开精准稳定的时钟信号作为支…...

软考教材重点内容 信息安全工程师 第22章 网站安全需求分析与安全保护工程

22.1.1 网站安全概念 网站是一个基于 B/S 技术架构的综合信息服务平台&#xff0c;主要提供网页信息及业务后台对外接口服务。一般网站涉及网络通信、操作系统、数据库、Web 服务器软件、Web 应用、浏览器、域名服务以及 HTML, XML,SSL; Web Services 等相关协议&#xff0c;同…...

数智读书笔记系列029 《代数大脑:揭秘智能背后的逻辑》

《代数大脑:揭秘智能背后的逻辑》书籍简介 作者简介 加里F. 马库斯(Gary F. Marcus)是纽约大学心理学荣休教授、人工智能企业家,曾创立Geometric Intelligence(后被Uber收购)和Robust.AI公司。他在神经科学、语言学和人工智能领域发表了大量论文,并著有《重启AI》等多部…...

UWB技术与5G、物联网结合的应用前景

‌ 一、核心应用场景与优势‌ ‌工业自动化与智能制造‌ ‌高精度设备协同‌&#xff1a;UWB技术&#xff08;3cm定位精度&#xff09;与5G&#xff08;1ms级时延&#xff09;结合&#xff0c;可实时追踪AGV、机械臂等设备位置&#xff0c;优化生产节拍&#xff0c;提升效率20…...

vue + element-plus自定义表单验证(修改密码业务)

写一个vue组件Password.vue 没有表单验证只有3个表单项 <template><div><el-form><el-form-item label"旧密码"><el-input></el-input></el-form-item><el-form-item label"新密码"><el-input>&l…...

如何将 Vue-FastAPI-Admin 项目的数据库从 SQLite 切换到 MySQL?

近期在github上看到一个开源项目&#xff0c;vue-fastapi-admin。它基于 FastAPI Vue3 Naive UI 的现代化前后端分离开发平台&#xff0c;融合了 RBAC 权限管理、动态路由和 JWT 鉴权&#xff0c;助力中小型应用快速搭建&#xff0c;也可用于学习参考。 由于该项目中数据库用…...

K8S运维实战之集群证书升级与容器运行时更换全记录

第一部分&#xff1a;Kubernetes集群证书升级实战 tips:此博文只演示一个节点作为示范&#xff0c;所有的集群节点步骤都可以参考。 项目背景 某金融业务系统Kubernetes集群即将面临生产证书集中过期风险&#xff08;核心组件证书剩余有效期不足90天&#xff09;&#xff0c…...

idea如何克隆拉取远程git项目到本地

概述 idea如何克隆拉取远程git项目到本地&#xff1f;方法很简单&#xff0c;找到入口&#xff0c;跟着引导窗口下一步下一步即可。 方法 File -> New -> Project from Version Control...然后根据引导窗口&#xff0c;一步一步操作即可...

聚铭网络亮相2025超云产品技术大会,联合发布“铭智安全运营大模型一体机及解决方案”

4月11日&#xff0c;于南京银城皇冠假日酒店举办的2025超云产品技术大会圆满落幕。聚铭网络受邀出席本次大会&#xff0c;并与超云联合发布了“铭智安全运营大模型一体机及解决方案”&#xff0c;为智能安全运营领域带来了全新突破。 会议背景 在全球人工智能技术加速产业化…...

成员访问运算符重载(详解)

目录 成员访问运算符 两层结构下的使用 三层结构下的使用&#xff08;难点&#xff09; 内存分析 成员访问运算符 成员访问运算符包括箭头访问运算符 -> 和解引用运算符 * &#xff0c;它们是指针操作最常用的两个运算符。我们先来看箭头运算符 -> 箭头运算符只能以…...

无感改造,完美监控:Docker 多阶段构建 Go 应用无侵入观测

作者&#xff1a;牧思 背景 随着云原生的普及&#xff0c;Golang 编程语言变得越来越热门。相比 Java&#xff0c;Golang 凭借其轻量&#xff0c;易学习的特点得到了越来越多工程师的青睐&#xff0c;然而由于 Golang 应用需要被编译成二进制文件再进行运行&#xff0c;Golan…...

项目后期发现重大漏洞,如何紧急修复

项目后期发现重大漏洞的紧急修复关键在于&#xff1a; 迅速识别漏洞根本原因、制定修复优先级、协调团队资源、实施快速修复和验证、总结经验防止重复发生。 其中&#xff0c;迅速识别漏洞根本原因是最为关键的一步。找到漏洞的根本原因有助于确保修复措施不仅解决眼前的问题&a…...

设计模式:状态模式 - 复杂状态切换的优雅之道

一、为什么用状态模式&#xff1f; 在开发过程中&#xff0c;你是否遇到过这样的难题&#xff1a;对象需要根据不同的状态执行不同行为&#xff0c;但代码中却充斥着大量的if-else或switch-case语句&#xff1f; 随着状态的增多&#xff0c;代码变得臃肿且难以阅读&#xff0…...

【AI提示词】业务开发经理

提示说明 业务开发经理旨在帮助用户构建一个高效、有洞察力的业务发展角色&#xff0c;能够在竞争激烈的市场中寻找并抓住商机。 提示词 # 角色 业务开发经理专家## 注意 - 业务开发经理应具备强烈的市场洞察力和人际沟通能力。 - 专家设计应考虑业务发展的实际需求和挑战。…...

发电机参数详解

一、发电机参数体系概述 发电机作为将机械能转换为电能的核心设备,其参数体系涵盖电气、机械、结构、性能、控制五大维度,是设备选型、运行维护、故障诊断的重要依据。参数体系的完整性和准确性直接影响电力系统的稳定性与经济性。以下通过思维导图展示发电机参数的整体架构…...

每天五分钟深度学习PyTorch:RNN CELL模型原理以及搭建

本文重点 RNN Cell(循环神经网络单元)是循环神经网络(RNN)的核心组成部分,用于处理序列数据中的每个时间步,并维护隐藏状态以捕获序列中的时间依赖关系。 RNN CELL的结构 RNN是一个循环结构,它可以看作是RNN CELL的循环,RNN CELL的结构如下图所示,RNN CELL不断进行…...

设计和实现一个基于 DDS(直接数字频率合成) 的波形发生器

设计和实现一个基于 DDS&#xff08;直接数字频率合成&#xff09; 的波形发生器 1. 学习和理解IP软核和DDS 关于 IP 核的使用方法 IP 核&#xff1a;在 FPGA 设计中&#xff0c;IP 核&#xff08;Intellectual Property Core&#xff09;是由硬件描述语言&#xff08;HDL&a…...

RCEP框架下eBay日本站选品战略重构:五维解析关税红利机遇

2024年RCEP深化实施背景下&#xff0c;亚太跨境电商生态迎来结构性变革。作为协定核心成员的日本市场&#xff0c;其跨境电商平台正经历新一轮价值重构。本文将聚焦eBay日本站&#xff0c;从政策解读到实操路径&#xff0c;系统拆解跨境卖家的战略机遇。 一、关税递减机制下的…...

使用 Node.js、Express 和 React 构建强大的 API

了解如何使用 Node.js、Express 和 React 创建一个强大且动态的 API。这个综合指南将引导你从设置开发环境开始&#xff0c;到集成 React 前端&#xff0c;并利用 APIPost 进行高效的 API 测试。无论你是初学者还是经验丰富的开发者&#xff0c;这篇文章都适合你。 今天&#…...

如何争取高层对项目的支持

争取高层对项目的支持关键在于明确项目的战略价值、展示其可行性与回报、以及有效的沟通和利益对接。高层管理者通常关注的是项目如何帮助公司实现整体战略目标&#xff0c;如何提高企业的竞争力或收益。在争取支持的过程中&#xff0c;项目经理需要清楚地表达项目的潜在价值&a…...

git合并分支原理

Git合并的原理是基于三方合并&#xff08;three-way merge&#xff09;算法&#xff0c;它通过比较三个快照来合并不同分支上的更改。这三个快照包括两个要合并的分支的最新提交和它们的共同祖先提交。合并过程并不是简单地按照提交时间来进行&#xff0c;而是通过比较这些快照…...

最短路问题

最短路问题 最短路问题 最短路算法&#xff08;Shortest Path Algorithm&#xff09;是用来解决图中两点之间的最短路径的问题。常见的应用包括&#xff1a;地图导航、网络路由、游戏寻路等。根据图的性质&#xff08;有向/无向、是否有负权边&#xff09;和需求&#xff08;…...

ARM Cortex汇编伪指令

在ARM架构&#xff08;尤其是Cortex-M系列MCU&#xff09;的汇编中&#xff0c;伪指令&#xff08;Pseudo-Instructions&#xff09;是由汇编器解释的特殊指令&#xff0c;用于定义数据、符号、代码结构或控制汇编过程。以下是常用的ARM汇编伪指令分类及说明&#xff1a; 一、…...

如何在vue3项目中使用 AbortController取消axios请求

在 Vue3 项目中通过 AbortController 取消 Axios 请求&#xff0c;可以通过以下 结构化步骤 实现。我们结合组合式 API&#xff08;Composition API&#xff09;和现代前端实践演示&#xff1a; 一、基础实现&#xff08;单个请求&#xff09; 1. 创建组件逻辑 <script s…...

Bright+Data网页解锁器在旅游行业的创新实践

引言 随着在线旅游平台的快速发展&#xff0c;网络爬虫技术成为获取旅游数据的重要手段。然而&#xff0c;主流旅游网站&#xff08;如去哪儿网、携程等&#xff09;普遍部署了反爬虫机制&#xff0c;包括IP封禁、验证码验证、请求频率限制等技术手段&#xff0c;严重影响了传…...

SpringMVC 执行流程

前言&#xff1a; 在前后端分离的情况下&#xff0c;SpringMVC 的执行流程主要集中在处理 RESTful 请求和返回 JSON 数据。这里的 Controller 会直接返回数据&#xff0c;而不是视图。我们通常会使用 RestController 和 RequestMapping 来处理请求&#xff0c;ResponseBody 会…...

STM32G0单片机自带RTC

STM32有个自带RTC外设&#xff0c;外接32.768KHz的晶振后可得到相对精确的计时功能。 实测了一个一小时快个1秒多。 1 cubeMX设置了RTC后自动生成的初始化代码如下 static void MX_RTC_Init(void) {/* USER CODE BEGIN RTC_Init 0 *//* USER CODE END RTC_Init 0 */RTC_TimeT…...

Linux(9)Apache

文章目录 Apache1&#xff09;概述2&#xff09;部署方案3&#xff09;yum安装Apache3.1、安装Apache3.2、启动Apache3.4、检查服务是否启动成功3.5、创建一个html页面3.6、yum安装Apache相关配置文件 4&#xff09;源码安装Apache4.1、源码编译口诀4.2、安装Apache4.2.1、获取…...

用DeepSeek AI高效制作专业PPT

在当今职场中,制作精美而有力的PPT是展示想法、汇报工作和赢得机会的关键技能。然而,许多人花费过多时间在格式调整和内容组织上,而非专注于核心信息的传达。DeepSeek AI作为新一代智能助手,能够帮助您将PPT制作效率提升300%,同时显著提高专业度。本文将详细介绍如何利用D…...

C++红黑树

目录 一、红黑树的概念 二、红黑树的定义 三、红黑树的实现 一、红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或者Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#…...

Day08 【基于jieba分词实现词嵌入的文本多分类】

基于jieba分词的文本多分类 目标数据准备参数配置数据处理模型构建主程序测试与评估测试结果 目标 本文基于给定的词表&#xff0c;将输入的文本基于jieba分词分割为若干个词&#xff0c;然后将词基于词表进行初步编码&#xff0c;之后经过网络层&#xff0c;输出在已知类别标…...

宝塔面板中解锁Laravel日志查看的奥秘

目录 一、前言二、Laravel 日志基础认知2.1 日志的作用2.2 Laravel 日志的默认配置 三、查找 Laravel 日志文件位置3.1 常规存储路径3.2 自定义路径查找 四、查看 Laravel 日志内容4.1 宝塔面板文件管理器查看4.2 使用命令行查看 五、常见问题及解决方法5.1 权限不足无法查看5.…...

基于MCP协议的多模态思维链在医疗系统改造中的融合研究

一、结构优化与内容整合编程方案 1. 强化MCP协议的技术映射 技术实现:上下文关联与动态资源适配 代码方案:基于Spring Cloud + OpenTelemetry的MCP协议集成 // MCP协议全局Trace ID生成与传递(Java示例) @Configuration public class MCPTraceConfig {@Beanpublic SpanP…...

js原型链污染

JavaScript 是一门非常灵活的语言&#xff0c;与 PHP 相比起来更加灵活。除了传统的 SQL 注入、代码执行等注入型漏洞外&#xff0c;也会有一些独有的安全问题&#xff0c;比如今天要说这个原型链污染。本篇文章就让我们来学习一下 NodeJS 原型链与原型链污染的原理。 什么是原…...

【HDFS入门】HDFS核心组件Failover Controller:高可用保障机制解析

目录 1 Failover Controller的角色职责 2 Failover Controller的运行原理 2.1 核心组件依赖 2.2 高可用架构图 3 故障转移机制详解 3.1 正常状态下的工作流程 3.2 故障触发切换流程 4 关键机制与技术挑战 4.1 防止脑裂&#xff08;Fencing&#xff09; 4.2 元数据同步 4.3 ZKFC…...

A008-Web 功能测试 – 咪咕音乐UI自动化,selenium

测试网址&#xff1a; https://music.migu.cn/v3 注 1&#xff1a;请设置足够的睡眠时间&#xff0c;保证网页顺利打开 注2&#xff1a;打开页面过程中&#xff0c; 网站可能有弹窗、验证信息&#xff0c;如果有&#xff0c;请手动关闭或重新运行代码&#xff0c; 保证后续流…...

Go:使用共享变量实现并发

竞态 在串行程序中&#xff0c;步骤执行顺序由程序逻辑决定&#xff1b;而在有多个 goroutine 的并发程序中&#xff0c;不同 goroutine 的事件先后顺序不确定&#xff0c;若无法确定两个事件先后&#xff0c;它们就是并发的。若一个函数在并发调用时能正确工作&#xff0c;称…...