Java8 - Stream API 处理集合数据
Java 8的Stream API提供了一种功能强大的方式来处理集合数据,以函数式和声明式的方式进行操作。Stream API允许您对元素集合执行操作,如过滤、映射和归约,以简洁高效的方式进行处理。
下面是Java 8 Stream API的一些关键特性和概念:
① 创建流:您可以从各数据源创建流,如集合、数组或I/O通道。
② 中间操作:Stream提供了一组中间操作,可以链接在一起对数据进行转换或过滤。一些常见的中间操作包括filter、map、flatMap、distinct、sorted和limit。
③ 终端操作:终端操作用于生成结果或产生副作用。终端操作的示例包括forEach、collect、reduce、min、max和count。
④ 惰性求值:Stream支持惰性求值,这意味着中间操作只有在调用终端操作时才会执行。这样可以高效处理大型数据集。
⑤ 并行处理:Stream API还支持并行处理,允许您利用多核处理器加速对大型数据集的操作。您可以使用parallel或parallelStream方法将顺序流转换为并行流。
01. map 函数
通过使用map函数,我们可以对流中的每个元素进行转换操作,从而得到一个新的流。这种转换可以是类型转换、属性提取、计算等。
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Person {private String name;private Integer age;
}
@Test
public void test0() {List<Person> list = Arrays.asList(new Person("zhangsan", 10),new Person("zhangsan", 11),new Person("wangwu", 12));//(1) map函数将list中的每个Person对象映射为其name属性,并使用collect()方法将新的流收集到一个新的列表nameList中List<String> nameList = list.stream().map(person -> {return person.getName();}).collect(Collectors.toList());System.out.println(nameList); // [zhangsan, zhangsan, wangwu]//(2) map函数将list中的每个Person对象映射为其年龄,并将映射后的结果收集到一个新的整数列表ageList中List<Integer> ageList = list.stream().map(Person::getAge).collect(Collectors.toList());System.out.println(ageList);//(3) map函数将list中的每个Person对象映射为其年龄加1后的整数,并使用collect方法将映射后的结果收集到一个新的列表ageList1中List<Integer> ageList1 = list.stream().map(person -> {return person.getAge() + 1;}).collect(Collectors.toList());//(4) map函数将list中的每个Person对象的名称转换为大写形式,并将结果收集到一个新的字符串列表uppercaseNames中。List<String> uppercaseNames = list.stream().map(person -> {return person.getName().toUpperCase();}).collect(Collectors.toList());
}
02. mapToInt函数
mapToInt是Stream接口提供的一个方法,用于将流中的元素映射为int类型的值。它接受一个ToIntFunction参数,用于指定如何将流中的元素映射为int类型的值。
@Test
public void test14() {List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);// map 函数Stream<Integer> stream = numbers.stream().map(n -> n * n);List<Integer> list1 = stream.collect(Collectors.toList());System.out.println(list1);// mapToInt 函数IntStream intStream = numbers.stream().mapToInt(n -> n * n);int sum = intStream.sum(); // 求和// OptionalDouble average = intStream.average(); // 平均值// OptionalInt max = intStream.max(); // 最大值// OptionalInt min = intStream.min(); // 最小值
}
map和mapToInt都是Stream接口提供的方法,用于对流中的元素进行映射转换。它们的区别在于返回值的类型和适用范围:
① map方法接受一个Function参数,用于指定如何将流中的元素映射为其他类型的值。它返回一个新的流,其中包含映射后的值。返回的流是一个泛型流,即Stream,其中R是映射后的值的类型。
② mapToInt方法也接受一个Function参数,用于指定如何将流中的元素映射为int类型的值。它返回一个新的IntStream,其中包含映射后的int值。返回的流是一个特殊的流,专门用于处理int类型的值,提供了更高效的操作和更少的内存消耗。
需要注意的是,IntStream提供了一些特殊的操作,例如sum、average、max、min等,这些操作只适用于IntStream,而不适用于泛型流Stream。如果需要对映射后的值进行这些特殊操作,应该使用mapToInt方法。
除了mapToInt方法,Stream接口还提供了其他一些类似的映射方法,如mapToLong和mapToDouble,用于将流中的元素映射为long类型和double类型的值。
03. filter 函数
通过使用filter函数,我们可以根据指定的条件过滤出流中满足条件的元素,从而得到一个新的流。这种过滤可以是基于元素的某个属性、某种关系或其他条件。
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Person {private String name;private Integer age;
}
@Test
public void test1() {List<Person> list = Arrays.asList(new Person("zhangsan", 10),new Person("zhangsan", 11),new Person("wangwu", 12));// filter函数过滤出列表中Person对象的name为zhangsan的元素,最后使用collect方法将过滤后的结果收集到一个新的列表中。List<Person> list1 = list.stream().filter(person -> {return person.getName().equals("zhangsan");}).collect(Collectors.toList());System.out.println(list1); // [Person(name=zhangsan, age=10), Person(name=zhangsan, age=11)]// 简洁写法List<Person> list2 = list.stream().filter(person -> person.getName().equals("zhangsan")).collect(Collectors.toList());// filter函数过滤出列表中Person对象的age为偶数的元素,最后使用collect方法将过滤后的结果收集到一个新的列表中。List<Person> list3 = list.stream().filter(person -> person.getAge() % 2 == 0).collect(Collectors.toList());System.out.println(list3); // [Person(name=zhangsan, age=10), Person(name=wangwu, age=12)]
}
04. flatMap 函数
flatMap函数是一种中间操作,用于对流中的每个元素进行映射操作,并将映射结果扁平化为一个新的流。
① flatMap函数将每个子列表映射为一个流,并将这些流扁平化为一个新的流:
@Test
public void test2() {// 首先创建一个嵌套的整数列表nestedList,其中包含了三个子列表。List<List<Integer>> nestedList = Arrays.asList(Arrays.asList(1, 2, 3),Arrays.asList(4, 5, 6),Arrays.asList(7, 8, 9));// flatMap函数将每个子列表映射为一个流,并将这些流扁平化为一个新的流,最后使用collect方法将扁平化后的结果收集到一个新的整数列表flattenedList中。List<Integer> flattenedList = nestedList.stream().flatMap(list->{return list.stream();}).collect(Collectors.toList());// 简洁写法List<Integer> collect = nestedList.stream().flatMap(List::stream).collect(Collectors.toList());System.out.println(collect);
}
② 使用flatMap函数将list中每个Person对象的ids列表扁平化为一个新的流:
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Person {List<Integer> ids;private String name;private Integer age;public Person(String name,Integer age){this.name = name;this.age = age;}
}
@Test
public void test3() {Person qo1 = new Person("zhangsan",10);qo1.setIds(Arrays.asList(1,2,3));Person qo2 = new Person("zhangsan",11);qo2.setIds(Arrays.asList(4,5,6));Person qo3 = new Person("wangwu",12);qo3.setIds(Arrays.asList(7,8,9));List<Person> list = new ArrayList<>();list.add(qo1);list.add(qo2);list.add(qo3);List<Integer> list1 = list.stream().flatMap(Person -> {return Person.getIds().stream();}).collect(Collectors.toList());System.out.println(list1); // [1, 2, 3, 4, 5, 6, 7, 8, 9]List<List<Integer>> list2 = list.stream().map(Person -> {return Person.getIds();}).collect(Collectors.toList());System.out.println(list2); // [[1, 2, 3], [4, 5, 6], [7, 8, 9]]List<Integer> list3 = list.stream().flatMap(Person -> {return Optional.ofNullable(Person.getIds()).orElse(new ArrayList<>()).stream();}).collect(Collectors.toList());System.out.println(list3); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
}
05. distinct 函数
distinct函数是一种中间操作,用于去除流中的重复元素,保留唯一的元素。它会根据元素的equals方法进行比较来判断元素是否重复。
@Test
public void test4() {List<Integer> list = Arrays.asList(1, 1, 2, 2, 3, 3, 4, 5);List<Integer> list1 = list.stream().distinct().collect(Collectors.toList());System.out.println(list1);
}
如果想要根据对象的属性进行去重,您可以使用Java 8的Stream API结合distinct函数和自定义的equals和hashCode方法来实现。
@NoArgsConstructor
@AllArgsConstructor
@Data
public
class Person {private String name;private int age;@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Person person = (Person) o;return age == person.age && Objects.equals(name, person.name);}@Overridepublic int hashCode() {return Objects.hash(name, age);}
}
@Test
public void test5() {List<Person> list = Arrays.asList(new Person("zhangsan", 10),new Person("zhangsan", 10),new Person("wangwu", 12));List<Person> collect = list.stream().distinct().collect(Collectors.toList());System.out.println(collect); // [Person(name=zhangsan, age=10), Person(name=wangwu, age=12)]
}
06. sorted 函数
sorted函数是一种中间操作,用于对流中的元素进行排序。它可以按照自然顺序或者通过自定义的比较器进行排序。
① sorted():按照自然顺序对流中的元素进行排序。
@Test
public void test6() {List<Integer> numbers = Arrays.asList(5, 2, 8, 1, 3);List<Integer> sortedNumbers = numbers.stream().sorted().collect(Collectors.toList());System.out.println(sortedNumbers); // [1, 2, 3, 5, 8]
}
② sorted(Comparator<? super T> comparator):根据自定义的比较器对流中的元素进行排序。
@Test
public void test7() {List<Integer> numbers = Arrays.asList(5, 2, 8, 1, 3);List<Integer> sortedNumbers = numbers.stream().sorted(new Comparator<Integer>() {@Overridepublic int compare(Integer obj1, Integer obj2) {// 倒序排序return obj2-obj1;}}).collect(Collectors.toList());System.out.println(sortedNumbers); // [8, 5, 3, 2, 1]// 降序排序List<Integer> collect = numbers.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
}
07. limit 函数
limit 函数是一种中间操作,用于截取流中的前n个元素。它会返回一个新的流,其中包含原始流中的前n个元素。
@Test
public void test8() {List<Integer> numbers = Arrays.asList(5, 2, 8, 1, 3);// 截取列表中的前3个元素List<Integer> list1 = numbers.stream().limit(3).collect(Collectors.toList());System.out.println(list1); // [5, 2, 8]// 对列表中的元素排序,再截取列表中的前3个元素List<Integer> list2 = numbers.stream().sorted().limit(3).collect(Collectors.toList());System.out.println(list2); // [1, 2, 3]
}
08. min 函数
min函数是一种终端操作,用于找到流中的最小元素。它接受一个Comparator函数作为参数,用于确定元素的顺序。通过使用min函数,我们可以方便地找到流中的最小元素。这对于需要找到最小值或根据某个属性进行排序的场景非常有用。
@Test
public void test9() {List<Integer> numbers = Arrays.asList(5, 2, 8, 1, 3);// min函数并传入比较器,找到流中的最小值Optional<Integer> optional = numbers.stream().min(new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {// 正序排序return o1 - o2;}});// 简洁写法Optional<Integer> optional1 = numbers.stream().min(Integer::compareTo);// 使用Optional类来处理可能为空的结果,并打印输出最小值if(optional.isPresent()){System.out.println(optional.get()); // 1}else {System.out.println("Stream is empty");}
}@Test
public void test10() {List<Integer> numbers = Arrays.asList(5, 2, 8, 1, 3);// min函数并传入比较器Optional<Integer> optional = numbers.stream().min(new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {// 倒叙排序return o2-o1;}});// 使用Optional类来处理可能为空的结果if(optional.isPresent()){System.out.println(optional.get()); // 8}else {System.out.println("Stream is empty");}
}
09. max 函数
max函数是一种终端操作,用于找到流中的最大元素。它接受一个Comparator函数作为参数,用于确定元素的顺序。
@Test
public void test11() {List<Integer> numbers = Arrays.asList(5, 2, 8, 1, 3);// max函数并传入比较器Optional<Integer> optional = numbers.stream().max(new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {// 正序排序return o1-o2;}});// 简洁写法Optional<Integer> optional1 = numbers.stream().max(Integer::compareTo);// 使用Optional类来处理可能为空的结果if(optional.isPresent()){System.out.println(optional.get()); // 8}else {System.out.println("Stream is empty");}
}
10. count 函数
count函数是一种终端操作,用于计算流中的元素数量。它返回一个long类型的值,表示流中的元素个数。
@Test
public void test12() {List<Integer> numbers = Arrays.asList(5, 2, 8, 1, 3);System.out.println(numbers.stream().count()); // 5
}
11. groupby 函数
groupBy函数,用于对流中的元素进行分组。groupBy函数接受一个Function参数,用于指定分组的依据。它将流中的元素按照该函数的返回值进行分组,并返回一个Map对象,其中键是分组的依据,值是属于该分组的元素列表。
@Test
public void test12() {List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);// 使用 n -> n % 2 == 0 ? "偶数" : "奇数"作为分组的依据,将整数列表按照奇偶数进行分组。// 最终得到的groups对象是一个Map,其中键是"奇数"和"偶数",值是属于该分组的整数列表。Map<String, List<Integer>> groups = numbers.stream().collect(Collectors.groupingBy(n -> n % 2 == 0 ? "偶数" : "奇数"));System.out.println(groups); // {偶数=[2, 4, 6, 8, 10], 奇数=[1, 3, 5, 7, 9]}
}
还可以使用groupBy函数按照对象的属性进行分组。
@Test
public void test13() {List<Person> list = Arrays.asList(new Person("zhangsan", 10),new Person("lisi", 10),new Person("wangwu", 12));Map<Integer, List<Person>> map = list.stream().collect(Collectors.groupingBy(person -> person.getAge()));// Map<Integer, List<Person>> map = list.stream().collect(Collectors.groupingBy(Person::getAge));System.out.println(map); // {10=[Person(name=zhangsan, age=10), Person(name=lisi, age=10)], 12=[Person(name=wangwu, age=12)]}
}
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
Java8 - Stream API 处理集合数据
Java 8的Stream API提供了一种功能强大的方式来处理集合数据,以函数式和声明式的方式进行操作。Stream API允许您对元素集合执行操作,如过滤、映射和归约,以简洁高效的方式进行处理。 下面是Java 8 Stream API的一些关键特性和概念ÿ…...
![](https://img-blog.csdnimg.cn/img_convert/15ed3450d4ee801d36527d3a81ce51be.gif)
漫步5G-A City,一份独属于上海的浪漫
作家亨利詹姆斯曾写道,“城市漫步,让我接触到了这个世界上最好的东西”。 用漫无目的地行走,来体验和观察一座城市,上海凭借丰富多元的文化特质,成为citywalk这种浪漫生活方式的流行地。 无论你是漫步在美术馆、画廊林…...
![](https://img-blog.csdnimg.cn/img_convert/e61cf3c4996766496cd59619d7535cea.png)
SpringBoot 如何处理跨域请求?你说的出几种方法?
引言:在现代的Web开发中,跨域请求(Cross-Origin Resource Sharing,CORS)是一个常见的挑战。随着前后端分离架构的流行,前端应用通常运行在一个与后端 API 不同的域名或端口上,这就导致了浏览器的…...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8)
OV SSL证书年度成本概览:为企业安全护航的经济之选
在当今数字化时代,企业网站不仅是品牌展示的窗口,更是与客户沟通的桥梁。然而,随着网络威胁的不断升级,保护网站安全成为了企业不可忽视的任务。SSL证书,特别是OV SSL证书,因其对企业身份的严格验证&#x…...
![](https://www.ngui.cc/images/no-images.jpg)
歌尔气压计SPA06-003在无人机的创新应用
随着科技的不断进步,各类智能设备的功能日益强大,其中气压计作为一种能够测量大气压力的传感器,已被广泛应用于多种领域。歌尔气压计以其高精度、低功耗的特点,在无人机和智能手表上的应用尤为突出,为这两个领域的产品…...
![](https://www.ngui.cc/images/no-images.jpg)
python3多文件操作
1 介绍 有两个.py文件,分别为main.py和util.py,执行main.py时,调用util.py当中的函数。 main.py内容如下, import util if __name__ "__main__":a [3.0,4.0]length util.get_length_from_vec(a)print(f"leng…...
![](https://www.ngui.cc/images/no-images.jpg)
312. 戳气球
312. 戳气球 题目链接:312. 戳气球 代码如下: //参考链接:https://leetcode.cn/problems/burst-balloons/solutions/336390/chuo-qi-qiu-by-leetcode-solution class Solution { public:int maxCoins(vector<int>& nums) {int nnums.size()…...
![](https://img-blog.csdnimg.cn/direct/37d5ffd7126249ecbf2961b5d5bd85df.png)
深入理解C++中的锁
目录 1.基本互斥锁(std::mutex) 2.递归互斥锁(std::recursive_mutex) 3.带超时机制的互斥锁(std::timed_mutex) 4.带超时机制的递归互斥锁(std::recursive_timed_mutex) 5.共享…...
![](https://img-blog.csdnimg.cn/direct/815cd4e7d35e4fd6ad7c96760189ee51.png)
压缩pdf文件大小,压缩pdf文件大小软件哪个好
在数字化时代,PDF文件因其卓越的跨平台兼容性和稳定性而成为工作与学习的好帮手。然而,当PDF文件体积过大时,传输和存储便成了一项挑战。别担心,本文将为你揭秘如何快速压缩PDF文件,让你的文档轻装上路! 压…...
![](https://img-blog.csdnimg.cn/62ecd3c3160341e0afee3dab710d6df3.jpg)
难道 Java 已经过时了?
当一门技术已经存在许多年了,它可能会失去竞争力,而后黯然退场,默默地离开,这对大部分的人来说就已经算是过时了。 Java 于 1995 年正式上线,至今已经走过了 27 个年头,在众多编程技术里算是年龄比较大的语…...
![](https://www.ngui.cc/images/no-images.jpg)
华为OD机考题(HJ32 密码截取)
前言 经过前期的数据结构和算法学习,开始以OD机考题作为练习题,继续加强下熟练程度。有需要的可以同步练习下。 描述 Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA&…...
![](https://www.ngui.cc/images/no-images.jpg)
【高考志愿】测绘科学与技术
目录 一、专业介绍 1.1 专业概述 1.2 专业方向 1.3 课程内容 二、就业前景 三、报考注意事项 四、测绘科学与技术专业排名 五、职业规划与未来发展 高考志愿选择测绘科学与技术专业,对于许多有志于空间信息技术领域发展的学生来说,无疑是一个极具…...
![](https://www.ngui.cc/images/no-images.jpg)
SpringBoot异步接口实现 提升吞吐量
前言 Servlet 3.0之前:HTTP请求由单一线程处理。Servlet 3.0之后:支持异步处理,提高系统吞吐量。 SpringBoot 异步接口实现方式 AsyncContext:Servlet层级,不常用。Callable:使用java.util.concurrent.C…...
![](https://img-blog.csdnimg.cn/direct/854c786e24ac4ce18e88ef2329636ad7.png)
C语言快速学习笔记
学习网站:C 语言教程 | 菜鸟教程 (runoob.com)C 语言教程 | 菜鸟教程 (runoob.com)C 语言教程 | 菜鸟教程 (runoob.com) 这个网站知识完整,讲解清晰。 在线C语言编程工具:菜鸟教程在线编辑器 (runoob.com) 国外学习网站:C语言介…...
![](https://img-blog.csdnimg.cn/direct/94b0251f19db4094b7f97261ff9968fb.png)
如何选择易用性高的项目管理软件?
随着项目管理在各行各业的广泛应用,选择一款易用性高的项目管理软件变得越来越重要。易用性高的软件可以帮助企业提高工作效率,降低管理成本,同时还能提升团队之间的协作能力。那么,如何选择一款易用性高的项目管理软件呢…...
![](https://www.ngui.cc/images/no-images.jpg)
vue3基于uni-app 封装小程序request请求
const BASE_URL https://47.122.26.142; // 替换为你的 API 基础 URL const token uni.getStorageSync(token);const request (url: string, method: any, data {}, headers {}) > {return new Promise((resolve, reject) > {uni.request({url: ${BASE_URL}${url},m…...
![](https://img-blog.csdnimg.cn/direct/7ecb53184b8e43159cc5bf532022006e.png#pic_center)
YOLO在目标检测与视频轨迹追踪中的应用
YOLO在目标检测与视频轨迹追踪中的应用 引言 在计算机视觉领域,目标检测与视频轨迹追踪是两个至关重要的研究方向。随着深度学习技术的飞速发展,尤其是卷积神经网络(CNN)的广泛应用,目标检测与视频轨迹追踪的性能得到…...
![](https://img-blog.csdnimg.cn/direct/080e0189047f40a2913d59ba5ef7e814.png)
版本控制系统:Git 纯应用(持续更新)
基本操作 ctrl上行键:上次代码 本地仓库:Git init 新建文件:touch xxxx.xxx 查看状态:Git status 文件从工作区——暂存区:Git add ./文件名(.是通配符代表所有) 暂存区——仓库:Git commit -m &…...
![](https://img-blog.csdnimg.cn/direct/373041d2619e46638848fb98d381ba74.png)
从0开始搭建vue项目
#先查下电脑有没有安装过node和npm node -v npm -v #安装vue npm install -g vue #安装webpack npm install webpack -g 都安装好后,进入你想创建的文件夹内 创建名字:vue init webpack <project_name> 就默认回车 然后根据项目需求Y/n 比如…...
![](https://www.ngui.cc/images/no-images.jpg)
Java框架常见面试题
在Java框架面试中,面试官通常会考察候选人对常见Java框架的理解、使用经验以及解决问题的能力。以下是一些常见的Java框架面试题及其详细回答: 1. Spring框架相关问题 问题:Spring框架的核心组件有哪些?它们各自的作用是什么&am…...
![](https://www.ngui.cc/images/no-images.jpg)
linux c 应用编程定时器函数
在 Linux C 应用编程中,对于多线程编程中的定时器函数使用,通常可以借助 pthread 库和系统提供的定时器相关的函数来实现。 首先,常见的定时器函数有 setitimer() 和 alarm() 。setitimer() 函数可以更精确地设置定时器,它可以设…...
![](https://img-blog.csdnimg.cn/direct/99c2c7ec22f94b79b8079942d4c52b7a.png)
设备调试上位机GUI
C Fast Qt C 前端 原来真的不需要在 design 上画来画去,有chat-gpt 那里不知道问哪里 全是组件拼起来的,不需要画,最后发现其实也是定式模式,跟着AI 学套路 最终前端界面 鼠标邮件绑定几个功能 太nice 了 在再加一个全局的日志模块 yyds MVC 的架构, 视图…...
![](https://img-blog.csdnimg.cn/direct/e884d957d0ba417f967dcb348e77e8ae.jpeg#pic_center)
项目管理系统厂商:奥博思发布《项目管理系统助力 IPD 高效落地》演讲
一场题为:“标准为基,项目之上 ,持续提升 PMO 卓越中心”的全国 PMO 专业人士年度盛会在京召开。会议围绕 PMO 卓越中心能力提升、项目管理标准化、项目管理体系建设等核心话题力邀业界专家、卓有建树的 PMO 实践精英来演讲、交流、分享。 奥…...
![](https://www.ngui.cc/images/no-images.jpg)
Java项目总结1
1.什么是面向对象(此对象非彼对象) “面向对象的方法主要是把事物给对象化,包括其属性和行为。面向对象编程更贴近实际生活的思想。总体来说面向对象的底层还是面向过程,面向过程抽象成类,然后封装,方便使用…...
![](https://www.ngui.cc/images/no-images.jpg)
Java中的类加载机制详解
Java中的类加载机制详解 大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 类加载机制概述 在Java中,类加载机制是Java虚拟机(JVM)将.class文件加载到内存中并转换…...
![](https://img-blog.csdnimg.cn/direct/11995463f62b420d8948ac19ecc1d873.gif#pic_center)
SwiftUI 中 Grid 内多个 NavigationLink 同时发生导航之诡异问题的解决
问题现象 不知小伙伴们发现了没有?在 SwiftUI 中如果有多个 NavigationLink 视图嵌入在 Grid(包括 LazyVGrid 和 LazyHGrid)容器中,点击其中任意一个 NavigationLink 都会导致所有导航一起发生。 如上图所示,点击 Grid 中任何一个 NavigationLink,所有 NavigationLink 都…...
![](https://img-blog.csdnimg.cn/direct/7e2959a0494044da88a1a411f1392da0.png)
51单片机第21步_将TIM0用作两个8位定时器同时将TIM1用作波特率发生器
本章重点讲解将TIM0用作两个8位定时器,同时将TIM1用作波特率发生器。 当定时器T0在方式3时,T1不能产生中断,但可以正常工作在方式0、1、2下,大多数情况下,T1将用作串口的波特率发生器。 1、定时器0工作在模式3框图&a…...
![](https://img-blog.csdnimg.cn/direct/885f769a1ebd488f9826410bf67d288c.png)
API-元素尺寸与位置
学习目标: 掌握元素尺寸与位置 学习内容: 元素尺寸与位置仿京东固定导航栏案例实现bilibili点击小滑块移动效果 元素尺寸与位置: 使用场景: 前面案例滚动多少距离,都是我们自己算的,最好是页面滚动到某个…...
![](https://img-blog.csdnimg.cn/direct/dea94082466c4967b29680ac146d8e6c.png#pic_center)
C语言中的基础指针操作
在C语言中,指针是一个非常重要的概念,它提供了直接访问内存地址的能力。指针变量用于存储内存地址,而不是数据值,在某种意义上和门牌号具有相似含义:指针是一个变量,其存储的是另一个变量的内存地址&#x…...
![](https://img-blog.csdnimg.cn/img_convert/6c78eaec698aaac866dd8e39e7de9d76.jpeg)
LabVIEW环境下OCR文字识别的实现策略与挑战解析
引言 在自动化测试领域,OCR(Optical Character Recognition,光学字符识别)技术扮演着重要角色,它能够将图像中的文字转换成机器可编辑的格式。对于使用LabVIEW约5个月,主要进行仪器控制与数据采集的你而言…...
![](https://www.ngui.cc/images/no-images.jpg)
中英双语介绍美国的州:堪萨斯州(Kansas)
中文版 堪萨斯州简介 堪萨斯州(Kansas)位于美国中部,以其广阔的平原、丰富的农业资源和多样的文化遗产而著称。以下是对堪萨斯州的详细介绍,包括其地理位置、人口、经济、教育、文化和主要城市。 地理位置 堪萨斯州位于美国中…...
![](https://img-blog.csdnimg.cn/direct/42d945beae724d159fd17f5c9df32178.png)
信息收集---端口服务信息收集
1. 什么是端口 是设备与外界通讯交流的出口。端口可分为虚拟端口和物理端口,其中虚拟端口指计算机内部或交换机路由器内的端口,不可见。例如计算机中的80端口、21端口、23端口等。物理端口又称为接口,是可见端口,计算机背板的RJ45…...
![](https://img-blog.csdnimg.cn/direct/9fe8f4cf36ca42f6bd5eb90f033126b8.jpeg)
Python知识点背诵手册,超详细知识梳理
一、手册介绍 《Python知识点背诵手册》是一份详尽的Python学习资料,旨在帮助学习者系统地掌握Python语言的基础知识和进阶技能。该手册将Python的所有关键语法和概念进行了精炼的总结,并以易于理解和记忆的方式呈现。以下是手册的主要特点和内容概述&a…...
![](https://www.ngui.cc/images/no-images.jpg)
【Pytorch实用教程】如何在多个GPU上使用分布式数据并行进行训练模型
文章目录 1. 代码(可直接运行,含随机生成的训练数据)2. 代码的详细解释2.1. 导入必要的库和模块2.2. 设置每个进程的初始设置2.3. 随机生成数据集类 `RandomDataset`2.4. 训练函数 `train`1. 代码(可直接运行,含随机生成的训练数据) 以下是一个基于PyTorch的多GPU分布式…...
![](https://www.ngui.cc/images/no-images.jpg)
PIL,OpenCV,Pytorch处理图像时的通道顺序(颜色,长宽深)
项目颜色通道顺序长宽通道顺序数据类型取值范围PILRGBHWCndarray0-255 (byte)OpenCVBGRHWCndarray0-255 (byte)PyTorchRGB/BGR (取决于如何读取)(N)CHWtensor0-1 (float, 标准化后); 0-255 (int, 未标准化) 注意以下几点: 颜色通道顺序:PIL默认使用RGB顺…...
![](https://img-blog.csdnimg.cn/img_convert/f1e21f19726c58b994594d7f79c4b622.jpeg)
经纬恒润亮相2024世界智能产业博览会
近日,以“智行天下 能动未来”为主题的2024世界智能产业博览会(以下简称“智博会”)在国家会展中心(天津)成功举办。本次智博会上,经纬恒润自主研发的汽车电子产品联合天津(西青)国家…...
![](https://www.ngui.cc/images/no-images.jpg)
Python序列化和反序列化
一.序列化和反序列化 在Python中,序列化(Serialization)和反序列化(Deserialization)是处理对象数据的过程,主要用于对象的存储或网络传输。 序列化(Serialization) 序列化是将Pyth…...
![](https://www.ngui.cc/images/no-images.jpg)
Stream toArray 好过collect
toArray 比collect 更好用,这样就不需要判断Null。 if(_user.getUserRole()!null) {_user.setRole(_roleList.stream().filter(_e->_e.getRoleId()_user.getUserRole()).toArray(Role[]::new)[0]); } if(_user.getUserRole()!null) {_user.setRole(_roleList.s…...
![](https://www.ngui.cc/images/no-images.jpg)
qt/c++/mysql教务管理系统
简介 qt/c/mysql教务管理系统 学生端,教师端,管理员端 演示 qt/c/mysql教务管理系统 源码获取 printf("白嫖勿扰,需要的加v%s","ywj17347418171");...
![](https://www.ngui.cc/images/no-images.jpg)
Echarts公共方法
Vue引入Echarts install 1.安装Echartsnpm install echarts --save 2.项目全局引入形式--#main.js 全局引入形式import * as echarts from "echarts"Vue.prototype.$echarts echarts 公共方法JS /*** author: wangjie* description: 通用echarts图表封装* date: …...
![](https://www.ngui.cc/images/no-images.jpg)
鸿蒙学习(二)
文章目录 1、弹窗2、走马灯(实现轮播图效果)3、注解6、多选框、单选框7、Stack8、TextTimer9、DatePicker 1、弹窗 显示提示信息或者用于用户交互 导入模块 prompt 接口 showToast:显示toast showDialog:显示对话框 showContextMenu:显示上下文菜单 sh…...
![](https://img-blog.csdnimg.cn/direct/4ebfc583cb38474c8b692e53b779cc98.jpeg)
企业机构营销目前106短信群发还有用吗?此文告诉你该如何抉择!
在当今竞争激烈的企业营销环境中,106短信群发平台依然是众多企业机构青睐的营销工具之一。尽管互联网技术的发展带来了多样化的沟通方式,但106短信群发凭借其直达性强、成本低廉、覆盖广泛等优势,仍然保持着不错的营销效果。然而,…...
![](https://www.ngui.cc/images/no-images.jpg)
DJYGUI AI低代码图形编程开发平台:开启嵌入式软件图形编程新纪元
在科技高速发展的当今时代,软件开发行业对创新和高效的需求日益增长。DJYGUI AI低代码图形编程开发平台的出现,为智能屏、物联屏、串口屏等嵌入式显示设备领域带来了全新的机遇。该平台由都江堰操作系统 AI 代码自动生成平台研发,具有显著的优…...
![](https://img-blog.csdnimg.cn/direct/1a9a14c37dc04a6d89ce960ec35958f0.png)
为什么不能在foreach中删除元素
文章目录 快速失败机制(fail-fast)for-each删除元素为什么报错原因分析逻辑分析 如何正确的删除元素remove 后 breakfor 循环使用 Iterator 总结 快速失败机制(fail-fast) In systems design, a fail-fast system is one which i…...
![](https://img-blog.csdnimg.cn/direct/4433a760426f4689964a40fbe788ebf9.png)
python学习-tuple及str
为什么需要元组 定义元组 元组的相关操作 元组的相关操作 - 注意事项 元组的特点 字符串 字符串的下标(索引) 同元组一样,字符串是一个:无法修改的数据容器。 如果必须要修改字符串,只能得到一个新的字符串ÿ…...
![](https://img-blog.csdnimg.cn/direct/a50b5a681e584b40acabde3573e6357e.gif)
Python深度理解系列之【排序算法——冒泡排序】
读者大大们好呀!!!☀️☀️☀️ 👀期待大大的关注哦❗️❗️❗️ 🚀欢迎收看我的主页文章➡️木道寻的主页 文章目录 🔥前言🚀冒泡排序python实现算法实现图形化算法展示 ⭐️⭐️⭐️总结 🔥前…...
![](https://www.ngui.cc/images/no-images.jpg)
边界框在目标检测中的作用与应用
目标检测是计算机视觉领域的核心任务之一,旨在从图像或视频中识别和定位感兴趣的目标。边界框(Bounding Box)是目标检测中常用的一种表示方法,用于确定目标在图像中的确切位置。本文将详细探讨边界框的概念、它在目标检测中的角色…...
![](https://img-blog.csdnimg.cn/direct/c43b0d18fe56448d9ac9e408af2a0051.png)
linux 环境报错:Peer reports incompatible or unsupported protocol version
出现问题的原因: curl 不兼容或不支持的协议版本。 解决方案: yum update -y nss curl libcurl如此继续之前的操作即可。...
![](https://img-blog.csdnimg.cn/img_convert/5e40fcf6f338810d4883b5f879013d54.jpeg)
深入解析:Java爬虫的本质是什么?
深入解析:Java爬虫的本质是什么? 引言: 随着互联网的快速发展,获取网络数据已成为许多应用场景中的重要需求。而爬虫作为一种自动化程序,能够模拟人类浏览器的行为,从网页中提取所需信息,成为了…...
![](https://img-blog.csdnimg.cn/28bd12af4ea844e895c4cdd8f4feb2e4.jpeg#pic_center)
【Matlab 六自由度机器人】机器人动力学之推导拉格朗日方程(附MATLAB机器人动力学拉格朗日方程推导代码)
【Matlab 六自由度机器人】机器人动力学概述 近期更新前言正文一、拉格朗日方程的推导1. 单自由度系统2. 单连杆机械臂系统3. 双连杆机械臂系统 二、MATLAB实例推导1. 机器人模型的建立2. 动力学代码 总结参考文献 近期更新 【汇总】 【Matlab 六自由度机器人】系列文章汇总 …...
![](https://www.ngui.cc/images/no-images.jpg)
菜鸡的原地踏步史(◐‿◑)
leetcode启动!(╯‵□′)╯︵┻━┻ 尝试改掉想到哪写哪的代码坏习惯 链表 相交链表 public class Solution {/**ac(公共长度)b所以 链表A的长度 a c,链表B的长度b ca b c b c a只要指针a从headA开始走,走完再…...
![](https://i-blog.csdnimg.cn/direct/e3b909a150bf484da770d9747623087f.png)
【收藏级神丹】Liae384_刘亦菲_直播可用,平衡度最高的原创神丹,独家珍稀资源
Liae384_刘亦菲_DFL神丹:点击下载 此丹较重,小卡可以使用但不能训练,实测复训适合24G卡8G、12G、16G卡下载练好的专丹直接使用即可384的Liae对各类杂论视频兼容比较好,高参也能容忍高分辨率的DST复用方式: 非必要不用删除AB&…...
![](https://www.ngui.cc/images/no-images.jpg)
spring @Autowire注解作用
终于有人把Autowired注解讲清楚了,赞!!!_autowired-CSDN博客...
![](https://www.ngui.cc/images/no-images.jpg)
表单长时间无响应,页面失效提示
先贴代码,有时间在解释 <template><div :class"$style.root"><div>主页面</div><el-input v-model"txt" input"onChange" /></div> </template> <script> const TIME 10; //时间&…...
![](https://www.ngui.cc/images/no-images.jpg)
jQuery UI 简介
jQuery UI 简介 1. 引言 jQuery UI 是一个建立在 jQuery JavaScript 库之上的开源小部件和交互库,旨在创建高度交互的网页。它提供了一系列预先设计好的小部件,如拖放、排序、对话框、工具提示等,以及用于构建复杂用户界面的交互方法。jQuery UI 的设计目标是简化 HTML 文…...
![](https://www.ngui.cc/images/no-images.jpg)
GB/T22239-2019信息安全技术网络安全等级保护基本要求笔记
网络安全等级保护基本要求笔记 缩略语二级安全要求安全物理环境1、物理位置选择2、物理访问控制3、防盗窃和防破坏4、防雷击5、防火6、防水和防潮7、防静电8、温湿度控制9、电力供应10、电池防护 安全通信网络1、网络架构2、通信传输3、可信验证 安全区域边界1、边界防护2、访问…...
![](https://www.ngui.cc/images/no-images.jpg)
JeepAvenger4xe,1.2T+双电机
近日,懂车之道获悉,Jeep品牌发布Avenger 4xe车型官图,据悉,新车预计今年晚些时候在欧洲上市。下面,和大家一起来看看新车的产品力如何?外观上,Avenger 4xe新车造型更为精致,封闭式七孔格栅装饰,前大灯组合,引擎上更是有多条筋线,下格栅造型硬朗,下包围采用大量黑色…...
![](https://www.ngui.cc/images/no-images.jpg)
领克07EM-P诠释原创精神,助力行业向上发展
随着五月悄然而至,北京汽车车展如约召开,各大车企携手全新车型纷纷亮相。5月17日,中国原创汽车品牌领克为用户带来了新品,领克07 EM-P迎来上市。这意味着领克在高端电动轿车市场正式站稳脚跟,出色的产品魅力,也成为很多消费者的优质选择。此次发布会现场,领克07 EM-P共推…...
![](https://img-blog.csdnimg.cn/direct/605de43c8626455db20fd02025750b0d.png)
HAL库使用FreeRTOS实时操作系统时配置时基源(TimeBase Source)
需要另外的定时器,用systic的时候生成项目会有警告 https://blog.51cto.com/u_16213579/10967728...
![](https://img-blog.csdnimg.cn/direct/7015e959212e4565bbcf38396008afe4.png)
在做题中学习(62):矩阵区域和
1314. 矩阵区域和 - 力扣(LeetCode) 解法:二维前缀和 思路:读题画图才能理解意思:dun点点的是mat中的一个数,而要求的answer同位置的数 以点为中心上下左右延长 k 个单位所围成长方形的和。 因为最后answ…...
![](https://img-blog.csdnimg.cn/direct/9a1edf7d6c2a4354a39d4c959ea10de8.png)
网络原理-HTTPS协议
在前面说到HTTP中,我们通过抓包,可以看到许多信息内容,其中往往会包含一些敏感信息,这些都是明文传输,当我们的请求被黑客或者不法分子截获后,那就很危险了,因此衍生出了HTTPS协议来对传输数据进行加密。 一、加密原理 基本原理如下: 明文 密钥 > 密文 密文…...
![](https://www.ngui.cc/images/no-images.jpg)
Python globals的简单使用 和getattr有什么区别?
globals() 和 getattr() 是 Python 中的两个内置函数,但它们的功能和使用场景是完全不同的。 1. **globals()** globals() 函数返回一个字典,表示当前全局符号表的当前状态。这个字典将变量名映射到它们的值。它主要用于查看和修改全局变量。 示例&#…...