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

【Lambda】java之lambda表达式stream流式编程操作集合

java之lambda表达式&stream流式编程操作集合

  • 1 stream流概念
    • 1.1 中间操作
      • 1.1.1 无状态操作
      • 1.1.2 有状态操作
    • 1.2 终端操作
      • 1.2.1 非短路操作
      • 1.2.2 短路操作
  • 2 steam流的生成
    • 2.1 方式一:数组转为stream流
    • 2.2 方式二:集合转为steam流
    • 2.3 方式三:Stream.builder创建stream流
    • 2.4 方式四:使用 Stream.of 方法
    • 2.5 方式五:从文件创建流
    • 2.6 方式六:生成无限流
  • 3 无状态的中间操作
    • 3.1 distinct
    • 3.2 limit
    • 3.3 skip
    • 3.4 sorted
    • 3.5 组合使用
  • 4 有状态的中间操作
    • 4.1 filter(重要)
    • 4.2 map(重要)
    • 4.3 flatMap
    • 4.4 peek
    • 4.5 组合使用
  • 5 非短路的终端操作
    • 5.1 forEach
    • 5.2 toArray
    • 5.3 reduce(重要)
    • 5.4 collect(重要)
    • 5.5 min、max、count
    • 5.6 组合使用
  • 6 短路的终端操作
    • 6.1 anyMatch
    • 6.2 allMatch
    • 6.3 noneMatch
    • 6.4 findFirst
    • 6.5 findAny
    • 6.6 组合使用
  • 7 并行流
  • 8 总结

1 stream流概念

简单来讲,Stream流是一种用于处理数据集合的高级迭代器,它可以对集合中的元素进行各种操作,如过滤、映射、排序等。通过使用Stream API,我们可以以声明式的方式处理数据,而无需显式地编写循环和条件语句。
Stream流的操作分为两种,中间操作终端操作

1.1 中间操作

是指对每个元素独立进行操作,不依赖于其他元素的状态。它们不会改变流中的元素本身,而是创建一个新的Stream对象来表示转换后的结果。常见的无状态中间操作有map、filter、flatMap等。

1.1.1 无状态操作

无状态操作不会改变流中的元素,也不会改变流的状态;这些操作可以并行执行,因为它们不依赖于流中的其他元素。例如:

  • distinct:返回去重的Stream。
  • limit:限制从流中获得前n个数据,返回前n个元素数据组成的Stream流。
  • skip:跳过前n个数据,返回第n个元素后面数据组成的Stream。sorted:返回一个排序的Stream。

1.1.2 有状态操作

有状态操作会改变流的状态,或者依赖于流中的其他元素。这些操作不能并行执行,因为它们需要访问或修改流的状态。
例如:

  • filter:过滤流,过滤流中的元素,返回一个符合条件的Stream
  • map:转换流,将一种类型的流转换为另外一种流。(mapToInt、mapToLong、mapToDouble 返回int、long、double基本类型对应的Stream)
  • peek:主要用来查看流中元素的数据状态,该方法主要用于调试,方便debug查看Stream内进行处理的每个元素。仅在对流内元素进行操作时,peek才会被调用,当不对元素做任何操作时,peek自然也不会被调用了
  • flatMap:简单的说,就是一个或多个流合并成一个新流。

1.2 终端操作

是对数据进行最终处理的操作,它们会消耗掉Stream并产生一个结果或者副作用(如输出到控制台)。一旦执行了终端操作,Stream就不能再被使用。常见的终端操作有collect、forEach、reduce等。

1.2.1 非短路操作

非短路操作会处理流中的所有元素,并返回一个结果。
如:

  • forEach:循环操作Stream中数据。
  • toArray:返回流中元素对应的数组对象。
  • reduce:聚合操作,用来做统计,将流中元素反复结合起来统计计算,得到一个值.。
  • collect:聚合操作,封装目标数据,将流转换为其他形式接收,如:List、Set、Map、Array。
  • min、max、count:聚合操作,最小值,最大值,总数量。

1.2.2 短路操作

短路操作会在满足某个条件时提前结束处理,并返回一个结果。例如:

  • anyMatch:短路操作,有一个符合条件返回true。
  • allMatch:所有数据都符合条件返回true。
  • noneMatch:所有数据都不符合条件返回true。
  • findFirst:短路操作,获取第一个元素。
  • findAny:短路操作,获取任一元素。

2 steam流的生成

2.1 方式一:数组转为stream流

int [] arr = {1,2,3,4,5,6,7,8,9,10};       
Arrays.stream(arr).forEach(System.out::println);

2.2 方式二:集合转为steam流

List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
list.stream().forEach(System.out::println);

2.3 方式三:Stream.builder创建stream流

Stream.builder创建stream流,允许你逐步构建一个流

Stream.Builder<Integer> builder = Stream.builder();// 添加元素到流中
builder.add(1);
builder.add(2);
builder.add(3);// 构建流
Stream<Integer> stream = builder.build();// 使用流
stream.forEach(System.out::println);

2.4 方式四:使用 Stream.of 方法

Stream.of 方法可以接受一系列元素并返回一个包含这些元素的流。

Stream<String> words = Stream.of("apple", "banana", "orange");
words.forEach(System.out::println);

2.5 方式五:从文件创建流

可以使用 Files.lines 方法从文件中创建流。

try (Stream<String> stream = Files.lines(Paths.get("file.txt"))) {stream.forEach(System.out::println);
} catch (IOException e) {e.printStackTrace();
}

2.6 方式六:生成无限流

可以使用 Stream.generate 或 Stream.iterate 方法来生成无限流。

Stream<Double> randomNumbers = Stream.generate(Math::random);
randomNumbers.forEach(System.out::println);
Stream<Integer> oddNumbers = Stream.iterate(1, n -> n + 2);
oddNumbers.forEach(System.out::println);

3 无状态的中间操作

3.1 distinct

返回一个去重的流,即去除重复的元素

Stream<Integer> distinctStream = Stream.of(1, 2, 2, 3, 4, 4, 5).distinct();
distinctStream.forEach(System.out::println);
//输出结果:12345

3.2 limit

限制从流中获得前n个数据,返回前n个元素数据组成的流

Stream<Integer> limitedStream = Stream.of(1, 2, 3, 4, 5).limit(3);
limitedStream.forEach(System.out::println);
//输出结果:123

3.3 skip

Stream<Integer> skippedStream = Stream.of(1, 2, 3, 4, 5).skip(2);
skippedStream.forEach(System.out::println);
//输出结果:345

3.4 sorted

//正序排序从小到大
Stream<Integer> sortedStream = Stream.of(5, 3, 1, 4, 2).sorted();
sortedStream.forEach(System.out::println);
//输出结果:12345//逆序排序从大到小,Comparator.reverseOrder() 创建了一个逆序比较器,然后传递给 sorted 方法,从而实现了逆序排序
Stream<Integer> sortedStream = Stream.of(5, 3, 1, 4, 2).sorted(Comparator.reverseOrder());
sortedStream.forEach(System.out::println);
//输出结果:54321

3.5 组合使用

这段代码首先去重,然后排序,跳过第一个元素,最后限制结果流只包含前三个元素

Stream<Integer> stream = Stream.of(1, 2, 2, 3, 4, 4, 5).distinct().sorted().skip(1).limit(3);
stream.forEach(System.out::println);
//输出结果:234

测试实体类:

@Data
public class Person {private int id;private String name; // 姓名private int salary; // 薪资private int age; // 年龄private String sex; //性别private String area; // 地区private List<Person> employeeList; //下属public Person() {}// 构造方法public Person(String name, int salary, int age,String sex,String area) {this.name = name;this.salary = salary;this.age = age;this.sex = sex;this.area = area;}// 构造方法public Person(int id, String name, int salary, int age, String sex, String area) {this.id = id;this.name = name;this.salary = salary;this.age = age;this.sex = sex;this.area = area;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", salary=" + salary +", age=" + age +", sex='" + sex + '\'' +", area='" + area + '\'' +'}';}
}
// 创建一个List来存储Person对象
List<Person> personList = new ArrayList<>();// 创建8个Person对象并添加到列表中
personList.add(new Person(1, "Alice", 5000, 30, "Female", "New York"));
personList.add(new Person(2, "Bob", 6000, 35, "Male", "Los Angeles"));
personList.add(new Person(3, "Charlie", 5500, 28, "Male", "Chicago"));
personList.add(new Person(4, "Diana", 7000, 40, "Female", "Miami"));
personList.add(new Person(5, "Ethan", 4800, 25, "Male", "Houston"));
personList.add(new Person(6, "Fiona", 5300, 32, "Female", "Seattle"));
personList.add(new Person(7, "George", 6200, 38, "Male", "Boston"));
personList.add(new Person(8, "Hannah", 5900, 29, "Female", "San Francisco"));

4 有状态的中间操作

4.1 filter(重要)

// 1. 筛选出所有女性
List<Person> females = personList.stream().filter(person -> person.getSex().equalsIgnoreCase("female")).collect(Collectors.toList());
System.out.println("女性列表: " + females);// 2. 筛选出薪资高于5000的人员
List<Person> highSalary = personList.stream().filter(person -> person.getSalary() > 5000).collect(Collectors.toList());
System.out.println("薪资高于5000的人员: " + highSalary);// 3. 筛选出年龄在30岁及以上的人员
List<Person> ageAbove30 = personList.stream().filter(person -> person.getAge() >= 30).collect(Collectors.toList());
System.out.println("年龄在30岁及以上的人员: " + ageAbove30);// 4. 筛选出居住在特定城市(例如"New York")的人员
List<Person> livingInNewYork = personList.stream().filter(person -> person.getArea().equalsIgnoreCase("New York")).collect(Collectors.toList());
System.out.println("居住在纽约的人员: " + livingInNewYork);// 5. 筛选出名字以"A"开头的人员
List<Person> namesStartingWithA = personList.stream().filter(person -> person.getName().startsWith("A")).collect(Collectors.toList());
System.out.println("名字以A开头的人员: " + namesStartingWithA);

4.2 map(重要)

// 1. 提取所有人的名字
List<String> names = personList.stream().map(Person::getName).collect(Collectors.toList());
System.out.println("所有人的名字: " + names);// 2. 提取所有人的薪资
List<Integer> salaries = personList.stream().map(Person::getSalary).collect(Collectors.toList());
System.out.println("所有人的薪资: " + salaries);// 3. 提取所有人的地区
List<String> cities = personList.stream().map(Person::getArea).collect(Collectors.toList());
System.out.println("所有人的城市: " + cities);// 4. 提取所有人的年龄,并加上10
List<Integer> agesPlus10 = personList.stream().map(person -> person.getAge() + 10).collect(Collectors.toList());
System.out.println("所有人的年龄加十: " + agesPlus10);// 5. 提取薪资信息并格式化为字符串
List<String> salaryInfo = personList.stream().map(person -> person.getName() + "的薪资为: " + person.getSalary()).collect(Collectors.toList());
System.out.println("薪资信息: " + salaryInfo);

4.3 flatMap

flatMap 是 Java Stream API 中的一个非常有用的方法,通常用于将多个流扁平化为一个流。在处理 Person 对象时,我们可以使用 flatMap 来进行一些复杂的数据结构操作。以下是一些示例,展示如何在你的 personList 上使用 flatMap。

List<String> flatMappedList = personList.stream().map(person -> person.getName()) // 将Person对象转换为名字.flatMap(name -> Stream.of(name, name.toUpperCase())) // 将名字转换为名字和名字的大写形式.collect(Collectors.toList());

4.4 peek

personList.stream().peek(person -> System.out.println("Before filter: " + person)) // 打印每个Person对象.filter(person -> person.getAge() > 30) // 过滤年龄大于30的Person对象.peek(person -> System.out.println("After filter: " + person)) // 打印过滤后的Person对象.collect(Collectors.toList());

4.5 组合使用

// 使用Stream API处理personList
List<String> combinedList = personList.stream().filter(person -> person.getAge() > 30) // 过滤年龄大于30的Person对象.map(person -> person.getName()) // 将Person对象转换为名字.flatMap(name -> Stream.of(name, name.toUpperCase())) // 将名字转换为名字和名字的大写形式.peek(System.out::println) // 打印每个名字.collect(Collectors.toList()); // 收集结果到一个List中

5 非短路的终端操作

5.1 forEach

personList.stream().forEach(person -> System.out.println(person.getName()));personList.stream().forEachOrdered(person -> System.out.println(person.getName()));

5.2 toArray

Object[] array = personList.stream().toArray();

5.3 reduce(重要)

// 1. 计算总薪资
int totalSalary = personList.stream().map(Person::getSalary).reduce(0, Integer::sum);
System.out.println("总薪资: " + totalSalary);// 2. 计算平均薪资
Optional<Double> averageSalary = personList.stream().map(Person::getSalary).reduce((a, b) -> a + b).map(sum -> sum / (double) personList.size());
System.out.println("平均薪资: " + averageSalary.orElse(0.0));// 3. 查找最高薪资
Optional<Integer> maxSalary = personList.stream().map(Person::getSalary).reduce(Integer::max);
System.out.println("最高薪资: " + maxSalary.orElse(0));// 4. 查找最低薪资
Optional<Integer> minSalary = personList.stream().map(Person::getSalary).reduce(Integer::min);
System.out.println("最低薪资: " + minSalary.orElse(0));// 5. 计算年龄之和
int totalAge = personList.stream().map(Person::getAge).reduce(0, Integer::sum);
System.out.println("总年龄: " + totalAge);

5.4 collect(重要)

//收集到 List集合
List<String> names = personList.stream().map(Person::getName).collect(Collectors.toList());
//收集到 Set集合
Set<String> cities = personList.stream().map(Person::getArea).collect(Collectors.toSet());
//收集到 Map集合
Map<Integer, String> idToNameMap = personList.stream().collect(Collectors.toMap(Person::getId, Person::getName));Map<Integer, Person> idToPersonMap = personList.stream().collect(Collectors.toMap(Person::getId, v -> v));
//收集到自定义集合
List<Person> sortedList = personList.stream().sorted(Comparator.comparing(Person::getAge)).collect(Collectors.toList());
//使用 Collectors.joining 连接字符串
String namesString = personList.stream().map(Person::getName).collect(Collectors.joining(", "));
//Collectors.groupingBy
Map<String, List<Person>> cityToPeopleMap = personList.stream().collect(Collectors.groupingBy(Person::getArea));
//使用 Collectors.partitioningBy 分区
Map<Boolean, List<Person>> isAdultMap = personList.stream().collect(Collectors.partitioningBy(person -> person.getAge() >= 18));
//使用 Collectors.summarizingInt 计算统计信息
IntSummaryStatistics salarySummary = personList.stream().collect(Collectors.summarizingInt(Person::getSalary));
double average = salarySummary.getAverage();//平均值
int max = salarySummary.getMax();//最大值
long count = salarySummary.getCount();//计数
int min = salarySummary.getMin();//最小值
long sum = salarySummary.getSum();//求和

5.5 min、max、count

Optional<Person> maxSalaryPerson = personList.stream().max(Comparator.comparing(Person::getSalary));
Optional<Person> minAgePerson = personList.stream().min(Comparator.comparing(Person::getAge));
long count = personList.stream().count();

5.6 组合使用

这段代码首先计算所有 Person 对象的工资总和,然后找到年龄最大的 Person 对象,最后将所有 Person 对象的名字收集到一个 List 中。

int totalSalary = personList.stream().mapToInt(Person::getSalary).reduce(0, Integer::sum);Optional<Person> oldestPerson = personList.stream().max(Comparator.comparing(Person::getAge));List<String> names = personList.stream().map(Person::getName).collect(Collectors.toList());

6 短路的终端操作

6.1 anyMatch

boolean hasFemale = personList.stream().anyMatch(person -> "Female".equals(person.getGender()));

6.2 allMatch

boolean allAdults = personList.stream().allMatch(person -> person.getAge() >= 18);

6.3 noneMatch

boolean noRetired = personList.stream().noneMatch(person -> person.getAge() >= 65);

6.4 findFirst

Optional<Person> firstPerson = personList.stream().findFirst();

6.5 findAny

Optional<Person> anyPerson = personList.stream().findAny();

6.6 组合使用

这段代码首先检查是否存在女性,然后找到第一个成年人,最后将所有成年人的名字收集到一个 List 中。

boolean hasFemale = personList.stream().anyMatch(person -> "Female".equals(person.getGender()));Optional<Person> firstAdult = personList.stream().filter(person -> person.getAge() >= 18).findFirst();List<String> names = personList.stream().filter(person -> person.getAge() >= 18).map(Person::getName).collect(Collectors.toList());

7 并行流

并行流可以提高处理大数据集时的性能。Java Stream API 的并行处理是基于 Java 的 Fork/Join 框架实现的。Fork/Join 框架是 Java 7 引入的一种并行计算框架,它可以将一个大任务拆分成多个小任务,然后在多个处理器上并行执行这些小任务,最后将结果合并。

在 Stream API 中,并行流是通过 parallelStream() 方法创建的。当你调用 parallelStream() 方法时,Stream API 会创建一个 ForkJoinTask,并将其提交给 ForkJoinPool 执行。ForkJoinPool 是一个特殊的线程池,它使用工作窃取算法来平衡任务执行,从而提高并行处理效率。

String allNames = personList.parallelStream().map(Person::getName).collect(Collectors.joining(", "));
System.out.println("All Names (Parallel): " + allNames);

8 总结

Stream API 的主要特点包括:

  1. 简洁性:Stream API 提供了一种简洁的方式来处理集合数据,使得代码更加易读、易写。
  2. 可读性:Stream API 的操作可以链式调用,使得代码更加清晰、易读。并行处理:Stream API 支持
  3. 并行处理,可以充分利用多核处理器的能力。
  4. 惰性求值:Stream API 的操作是惰性求值的,即只有在需要结果时才会执行操作。
  5. 无状态操作:Stream API 的无状态操作不会改变流中的元素,也不会改变流的状态。
  6. 有状态操作:Stream API 的有状态操作会改变流的状态,或者依赖于流中的其他元素。
  7. 短路操作:Stream API 的短路操作会在满足某个条件时提前结束处理,并返回一个结果。
  8. 终端操作:Stream API 的终端操作会处理流中的所有元素,并返回一个结果。

创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️

在这里插入图片描述

相关文章:

【Lambda】java之lambda表达式stream流式编程操作集合

java之lambda表达式&stream流式编程操作集合 1 stream流概念1.1 中间操作1.1.1 无状态操作1.1.2 有状态操作 1.2 终端操作1.2.1 非短路操作1.2.2 短路操作 2 steam流的生成2.1 方式一&#xff1a;数组转为stream流2.2 方式二&#xff1a;集合转为steam流2.3 方式三&#xf…...

家具购物小程序+php

基于微信小程序的家具购物小程序的设计与实现 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了基于微信小程序的家具购物小程序的设计与实现的开发全过程。通过分析基于微信小程序的家具购物小程序的设计与实…...

【GIS教程】使用GDAL-Python将tif转为COG并在ArcGIS Js前端加载-附完整代码

目录 一、数据格式 二、COG特点 三、使用GDAL生成COG格式的数据 四、使用ArcGIS Maps SDK for JavaScript加载COG格式数据 一、数据格式 COG&#xff08;Cloud optimized GeoTIFF&#xff09;是一种GeoTiff格式的数据。托管在 HTTP 文件服务器上&#xff0c;可以代替geose…...

VB.net进行CAD二次开发(二)与cad交互

开发过程遇到了一个问题&#xff1a;自制窗口与控件与CAD的交互。 启动类&#xff0c;调用非模式窗口 Imports Autodesk.AutoCAD.Runtime Public Class Class1 //CAD启动界面 <CommandMethod("US")> Public Sub UiStart() Dim myfrom As Form1 New…...

【NLP 11、Adam优化器】

祝你先于春天&#xff0c; 翻过此间铮铮山峦 —— 24.12.8 一、Adam优化器的基本概念 定义 Adam&#xff08;Adaptive Moment Estimation&#xff09;是一种基于梯度的优化算法&#xff0c;用于更新神经网络等机器学习模型中的参数。它结合了动量法&#xff08;Momentum&…...

51单片机应用开发(进阶)---串口接收字符命令

实现目标 1、巩固UART知识&#xff1b; 2、掌握串口接收字符数据&#xff1b; 3、具体实现目标&#xff1a;&#xff08;1&#xff09;上位机串口助手发送多字符命令&#xff0c;单片机接收命令作相应的处理&#xff08;如&#xff1a;openled1 即打开LED1;closeled1 即关…...

redis 怎么样删除list

在 Redis 中&#xff0c;可以使用以下方法删除列表或列表中的元素&#xff1a; 1. 删除整个列表 使用 DEL 命令删除一个列表键&#xff1a; DEL mylist这个命令会删除键 mylist 及其值&#xff08;无论 mylist 是一个列表还是其他类型的键&#xff09;。 2. 删除列表中的部分…...

【数据结构——内排序】快速排序(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 测试说明 我的通关代码: 测试结果&#xff1a; 任务描述 本关任务&#xff1a;实现快速排序算法。 测试说明 平台会对你编写的代码进行测试&#xff1a; 测试输入示例&#xff1a; 10 6 8 7 9 0 1 3 2 4 5 (说明&#xff1a;第一行是元素个数&a…...

npm或yarn包配置地址源

三种方法 1.配置.npmrc 文件 在更目录新增.npmrc文件 然后写入需要访问的包的地址 2.直接yarn.lock文件里面修改地址 简单粗暴 3.yarn install 的时候添加参数 设置包的仓库地址 yarn config set registry https://registry.yarnpkg.com 安装&#xff1a;yarn install 注意…...

STUN服务器用于内网NAT的方案

在内网中部署 STUN 服务器的场景通常用于处理多层 NAT 或内网客户端之间的通信需求&#xff0c;尤其是在大企业或学校等复杂网络环境下。通过 STUN 服务器&#xff0c;可以帮助客户端设备检测和适配 NAT 转换规则&#xff0c;进而支持 WebRTC 或其他实时通信技术的正常运行。 …...

Linux 简单命令总结

1. 简单命令 1.1. ls 列出该目录下的所有子目录与文件&#xff0c;后面还可以跟上一些选项 常用选项&#xff1a; ・-a 列出目录下的所有文件&#xff0c;包括以。开头的隐含文件。 ・-d 将目录象文件一样显示&#xff0c;而不是显示其下的文件。如&#xff1a;ls -d 指定目…...

Vue.js组件开发:提升你的前端工程能力

Vue.js 是一个用于构建用户界面的渐进式框架&#xff0c;它允许开发者通过组件化的方式创建可复用且易于管理的代码。在 Vue.js 中开发组件是一个直观且高效的过程&#xff0c;下面我将概述如何创建和使用 Vue 组件&#xff0c;并提供一些最佳实践。 1. 创建基本组件 首先&am…...

使用 Pandas 读取 JSON 数据的五种常见结构解析

文章目录 引言JSON 数据的五种常见结构1. split 结构2. records 结构3. index 结构4. columns 结构5. values 结构 引言 在日常生活中&#xff0c;我们经常与各种数据打交道&#xff0c;无论是从网上购物的订单信息到社交媒体上的动态更新。JSON&#xff08;JavaScript Object…...

C++鼠标轨迹算法(鼠标轨迹模拟真人移动)

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…...

Go mysql驱动源码分析

文章目录 前言注册驱动连接器创建连接交互协议读写数据读数据写数据 mysqlConncontext超时控制 查询发送查询请求读取查询响应 Exec发送exec请求读取响应 预编译客户端预编译服务端预编译生成prepareStmt执行查询操作执行Exec操作 事务读取响应query响应exec响应 总结 前言 go…...

GNSS误差源及差分定位

GNSS误差源&#xff1a; &#xff08;一&#xff09;卫星星历误差 由星历信息所得出的卫星位置坐标与实际位置坐标的偏差就是星历误差。星历信息是由 GPS 地面部分测量计算后传入空间部分的。由于卫星在运动中要受到各种摄动力的作用, 而地面部分又很难精确测量这些作用力,…...

pg数据类型

1、数值类型&#xff1a; smallint 2 字节 小范围整数 -32768 到 32767 integer 4 字节 常用的整数 -2147483648 到 2147483647 bigint 8 字节 大范围整数 -9223372036854775808 到 9223372036854775807 decimal 可变长 用户指定的精度&#x…...

【java】finalize方法

目录 1. 说明2. 调用过程3. 注意事项 1. 说明 1.finalize方法是Java中Object类的一个方法。2.finalize方法用于在对象被垃圾回收之前执行一些清理工作。3.当JVM&#xff08;Java虚拟机&#xff09;确定一个对象不再被引用、即将被回收时&#xff0c;会调用该对象的finalize方法…...

HNU_多传感器(专选)_作业4(构建单层感知器实现分类)

1. (论述题)&#xff08;共1题&#xff0c;100分&#xff09; 假设平面坐标系上有四个点&#xff0c;要求构建单层感知器实现分类。 (3,3),(4,3) 两个点的标签为1&#xff1b; (1,1),(0,2) 两个点的标签为-1。 思路&#xff1a;要分类的数据是2维数据&#xff0c;需要2个输入…...

以太网链路详情

文章目录 1、交换机1、常见的概念1、冲突域2、广播域3、以太网卡1、以太网卡帧 4、mac地址1、mac地址表示2、mac地址分类3、mac地址转换为二进制 2、交换机的工作原理1、mac地址表2、交换机三种数据帧处理行为3、为什么会泛洪4、转发5、丢弃 3、mac表怎么获得4、同网段数据通信…...

vue3 setup语法,子组件点击一个元素打印了这个元素的下标id,怎么传递给父组件,让父组件去使用

问&#xff1a; vue3 setup语法&#xff0c;子组件点击一个元素打印了这个元素的下标id&#xff0c;怎么传递给父组件&#xff0c;让父组件去使用 回答&#xff1a; 在 Vue 3 中&#xff0c;你可以使用 setup 语法糖和组合式 API 来实现子组件向父组件传递数据。具体来说&am…...

《Keras3 minist 手写数字AI模型训练22秒精度达到:0.97》

《Keras3 minist 手写数字AI模型训练22秒精度达到&#xff1a;0.97》 一、修改源码加上如下两条代码二、源码修改如下三、Keras3 minist 训练22秒结束&#xff0c;训练过程截图四、Keras3 minist 源码截图 一、修改源码加上如下两条代码 import os os.environ["KERAS_BAC…...

【.net core】【sqlsugar】大数据写入配置(需要版本5.0.45)

官网连接 https://www.donet5.com/home/Doc?typeId2404 泛型方法 /// <summary> /// 大数据写入&#xff08;泛型方法&#xff09; /// </summary> /// <param name"entitys"></param> /// <returns></returns> ///代码中_d…...

ansible运维实战

通过学习ansible自动化运维&#xff0c;初步对ansible有了一定的了解&#xff0c;此次分享两个案例&#xff0c;希望对大家有所帮助 案例一&#xff1a;自动化安装nginx 本次案例目的是ansible自动化安装nginx并配置 首先创建如图所示目录 在主机上安装好nginx&#xff0c;如…...

DDOS分布式拒绝服务攻击

DDOS分布式拒绝服务攻击 简单来说 传统的DOS就是一台或者多台服务对一个受害目标&#xff08;服务器&#xff0c;路由&#xff0c;ip&#xff0c;国家&#xff09;进行攻击&#xff0c;当范围过大时就是DDOS。目的就是通过大规模的网络流量使得正常流量不能访问受害目标&…...

如何使用 Python 实现 UDP 通信?

1. UDP通信基础 UDP&#xff08;用户数据报协议&#xff09;是一种无连接的传输层协议&#xff0c;它提供了一种不可靠的数据传输服务&#xff0c;但具有较低的延迟和较小的开销。在Python中&#xff0c;可以使用socket模块来实现UDP通信。 2. 实现UDP服务端 import socketd…...

MTK 配置文件梳理

文章目录 MTK 日常配置总结屏幕默认横竖屏显示ro.build.characteristics 属性修改修改点一&#xff1a;build\core\product_config.mk修改点二&#xff1a;build\make\core\main.mk修改是否成功&#xff0c;adb 验证 配置部分系统app handheld_product.mk配置系统属性、第三方应…...

论文笔记:Treat Visual Tokens as Text? But Your MLLM Only Needs Fewer Efforts to See

2024 10月的arxiv 1 主要idea 针对多模态大模型&#xff08;如LLaVA&#xff09;&#xff0c;提出了一系列高效的剪枝策略 在显著降低计算开销&#xff08;多达 88%&#xff09;的同时&#xff0c;保持了模型在多模态任务中的性能表现 2 目前的问题 与文本 token 相比&…...

软考高级架构 —— 10.6 大型网站系统架构演化实例 + 软件架构维护

10.6 大型网站系统架构演化实例 大型网站的技术挑战主要来自于庞大的用户&#xff0c;高并发的访问和海量的数据&#xff0c;主要解决这类问题。 1. 单体架构 特点: 所有资源&#xff08;应用程序、数据库、文件&#xff09;集中在一台服务器上。适用场景: 小型网站&am…...

2024美赛数学建模C题:网球比赛中的动量,用马尔可夫链求解!详细分析

文末获取历年美赛数学建模论文&#xff0c;交流思路模型 接下来讲解马尔可夫链在2024年C题中的运用 1. 马尔科夫链的基本原理 马尔科夫链是描述随机过程的一种数学模型&#xff0c;其核心特征是无记忆性。 简单来说&#xff0c;系统在某一时刻的状态只取决于当前状态&#x…...

启动wordpress mu功能/百度网盘app下载安装官方免费下载

单例模式&#xff1a; 单例模式&#xff0c;它是指在设计一个类时&#xff0c;需要保证在整个运行期间针对该类只存在一个实例对象。 class BBC{private static BBC bbcnew BBC(); private BBC(){} //私有化构造方法public static BBC getBBC(){return bbc;} }类的构造…...

哪个公司做网站/目前推广软件

第1题. 编写一个Filter&#xff0c;需要&#xff08;&#xff09; A. 继承Filter 类 B. 实现Filter 接口 C. 继承HttpFilter 类 D. 实现HttpFilter接口 正确答案为&#xff1a;B 第2题. 自定义标签的配置文件放在________ A. WebRoot B. lib C. cl…...

做民宿怎么登录网站/深圳英文站seo

dubbo深入浅出—923人已学习 课程介绍 Dubbo是阿里巴巴SOA服务化治理方案的核心框架&#xff0c;每天为2,000个服务提供3,000,000,000次访问量支持&#xff0c;并被广泛应用于阿里巴巴集团的各成员站点。课程收益学会dubbo的使用和理解dubbo的代码实现和底层原理讲师介绍熊文…...

番禺俊才网/seo自学教程推荐

【问题描述】 已知cosx的近似计算公式如下&#xff1a; cosx 1 - x2/2! x4/4! - x6/6! … (-1)nx2n/(2n)! 其中x为弧度&#xff0c;n为大于等于0的整数。编写程序根据用户输入的x和n的值&#xff0c;利用上述近似计算公式计算cosx的近似值&#xff0c;要求输出结果小数点…...

构建网站的步骤/百度成都总部

InfluxDB 简介与安装 1、InfluxDB 简介 官网&#xff1a;https://www.influxdata.com/ 中文文档&#xff1a;https://jasper-zhang1.gitbooks.io/influxdb/content/ InfluxDB 是用Go语言编写的一个开源分布式时序、事件和指标数据库&#xff0c;无需外部依赖。 类似的数据库有…...

做网站和做小程序有什么不同/河南网络推广公司

在WPF中关于RichEditControl的使用&#xff0c;以下代码是我采用信息发布进行简单的测试。 1、新增一篇文章&#xff0c;文章中包含文本、图片等信息&#xff0c;点击保存按钮&#xff0c;即可发布信息。 2、在数据行上&#xff0c;点击查看按钮&#xff0c;即可看到该文章的…...