【进阶篇-Day12:JAVA中stream流、File类的介绍】

目录

  • 1、stream流
    • 1.1 stream流的作用
    • 1.2 stream流的思想
    • 1.3 获取stream流对象
    • 1.4 stream流中间操作方法
    • 1.5 stream流终结操作方法
    • 1.6 stream收集操作
    • 1.7 stream的综合案例
  • 2、File类
    • 2.1 File类创建文件对象
    • 2.2 File类的常用方法
    • 2.3 File类的创建和删除方法
    • 2.4 File类的遍历方法
      • 练习一:
      • 练习二:
      • 练习三:
      • 练习四:

1、stream流

1.1 stream流的作用

在这里插入图片描述

1.2 stream流的思想

在这里插入图片描述

注:stream流就是流水线工作,即将数据放入流水线(获取流对象),然后加工(中间方法),最后输出(终结方法

1.3 获取stream流对象

在这里插入图片描述

package com.itheima.stream;
import java.util.*;
import java.util.stream.Stream;public class StreamDemo1 {/*** 获取Stream流对象演示:*     - 将数据放在流水线的传送带上**     1、集合获取 Stream 流对象 (使用Collection接口中的默认方法)*             default Stream<E> stream()*             注意:Map集合获取Stream流对象,需要间接获取:*                     - map.entrySet().stream()**     2、数组获取 Stream 流对象 (使用Array数组工具类中的静态方法)*             static <T> Stream<T> stream (T[] array)**     3、零散的数据获取Stream 流对象 (使用Stream类中的静态方法)*             static <T> Stream<T> of(T... values)*/public static void main(String[] args) {//1、集合获取 Stream 流对象//1.1 List集合获取 Stream 流对象List<String> list = new ArrayList<>();list.add("张三丰");list.add("张无忌");list.add("张翠山");list.add("王二麻子");list.add("张良");list.add("谢广坤");list.stream().forEach(s -> {System.out.println(s);});//1.2 Set集合获取 Stream 流对象Set<String> set = new HashSet<>();set.add("张三丰");set.add("张无忌");set.add("张翠山");set.add("王二麻子");set.add("张良");set.add("谢广坤");set.stream().forEach(s -> System.out.println(s));//1.3 Map集合获取 Stream 流对象Map<String, Integer> map = new HashMap<>();map.put("张三丰", 100);map.put("张无忌",98);map.put("张翠山",29);map.put("王二麻子",55);map.put("张良",68);map.put("谢广坤",70);map.entrySet().stream().forEach(s -> System.out.println(s));//2、数组获取 Stream 流对象int[] arr1 = {11,22,33};double[] arr2 = {11.1,22.2,33.3};Arrays.stream(arr1).forEach(s -> System.out.println(s));Arrays.stream(arr2).forEach(s -> System.out.println(s));//3、零散的数据获取Stream 流对象: 零散就是这些数既没有在集合中,也没有在数组中Stream.of(1,2,3,4,5,6).forEach(s -> System.out.println(s));Stream.of("11","22","33","44").forEach(s -> System.out.println(s));}
}

1.4 stream流中间操作方法

在这里插入图片描述

package com.itheima.stream;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class StreamDemo2 {/*** Stream流的中间操作方法:*     - 操作后返回Stream流对象,可以继续操作**     Stream<T> filter(Predicate<? super T> predicate) 用于对流中的数据进行过滤*     Stream<T> limit(long maxSize) 获取前几个元素*     Stream<T> skip(long n) 跳过前几个元素*     Stream<T> distinct() 去除流中重复的元素依赖(hashCode 和 equals方法)*     static <T> Stream<T> concat(Stream a, Stream b) 合并a和b两个流为一个流*         - 注意:如果流的对象消费过(使用过),就不允许再消费了。*/public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("张三丰");list.add("张无忌");list.add("张翠山");list.add("王二麻子");list.add("张良");list.add("谢广坤");//需求1:将集合中以【张】开头的数据 和 长度为3,过滤出来并打印在控制台list.stream().filter(v -> v.startsWith("张")).filter(v -> v.length() == 3).forEach(e -> System.out.println(e));System.out.println("-------------------------------------");//需求2:取前3个数据在控制台输出 ---> limit(long maxSize) 获取前几个元素list.stream().limit(3).forEach(e -> System.out.println(e));System.out.println("-------------------------------------");//需求3:跳过3个元素,把剩下的元素在控制台输出  ---> skip(long n) 跳过前几个元素list.stream().skip(3).forEach(e -> System.out.println(e));System.out.println("-------------------------------------");//需求4:跳过2个元素,把剩下的元素中前2个在控制台输出list.stream().skip(2).limit(2).forEach(e -> System.out.println(e));System.out.println("-------------------------------------");//需求5:取前4个数据组成一个流Stream<String> stream1 = list.stream().limit(4);System.out.println("-------------------------------------");//需求6:跳过2个数据组成一个流Stream<String> stream2 = list.stream().skip(2);System.out.println("-------------------------------------");//需求7:合并需求1和需求2得到的流,并把结果在控制台输出Stream<String> stream3 = Stream.concat(stream1, stream2);
//        stream3.forEach(e -> System.out.println(e));//注意:流用过之后,不可以再用了System.out.println("-------------------------------------");//需求8:合并需求1和需求2得到的流,并把结果在控制台输出,要求字符串元素不能重复stream3.distinct().forEach(e -> System.out.println(e));System.out.println("-------------------------------------");}
}

在这里插入图片描述

1.5 stream流终结操作方法

在这里插入图片描述

package com.itheima.stream;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;public class StreamDemo3 {/*** Stream流的终结操作方法*     - 流水线中的最后一道工序* *     public void forEach(Consumer action) 对此流的每个元素执行遍历操作*     public long count() 返回此流中的元素数*/public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("张三丰");list.add("张无忌");list.add("张翠山");list.add("王二麻子");list.add("张良");list.add("谢广坤");//1、forEach(Consumer action) 对此流的每个元素执行遍历操作list.stream().forEach(e -> System.out.println(e));//2、long count() 返回此流中的元素数System.out.println(list.stream().count());//6System.out.println(Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9).count());//9}
}

1.6 stream收集操作

注意:
Stream不会修改原始的集合,因此在流里的操作后的结果,需要用新的集合来保存。

在这里插入图片描述

package com.itheima.stream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class StreamDemo4 {/*** Stream流的收集操作:*     public R collect (Collector c):将流中的数据收集到集合**         Collectors*             public static <T> Collector toList()*             public static <T> Collector toSet()*             public static <T> Collector toMap(Function keyMapper,Function valueMapper)*/public static void main(String[] args) {//1、toList():将流对象收集到list集合中List<Integer> list = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10).filter(e -> e % 2 == 0).collect(Collectors.toList());System.out.println(list);//[2, 4, 6, 8, 10]//2、toSet():将流对象收集到set集合中 ---> 注意,收集时set还是会去重Set<Integer> set = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10,10,10,10).filter(e -> e % 2 == 0).collect(Collectors.toSet());System.out.println(set);//[2, 4, 6, 8, 10]//3、toMap()方法比较复杂,用一个需求来介绍:/*需求:创建一个 ArrayList 集合,并添加以下字符串"张三,23","李四,24","王五,25"保留年龄大于等于24岁的人,并将结果收集到Map集合中,姓名为键,年龄为值*/ArrayList<String> arrayList = new ArrayList<>();arrayList.add("张三,23");arrayList.add("李四,24");arrayList.add("王五,25");Map<String, Integer> map1 = arrayList.stream().filter(s -> Integer.parseInt(s.split(",")[1]) >= 24).collect(Collectors.toMap(new Function<String, String>() {@Overridepublic String apply(String s) {//第一个匿名内部类 ---》指定keyreturn s.split(",")[0];}}, new Function<String, Integer>() {@Overridepublic Integer apply(String s) {//第二个匿名内部类 ---》指定valuereturn Integer.parseInt(s.split(",")[1]);}}));//上述写法可写成lambda表达式,如下:Map<String, Integer> map2 = arrayList.stream().filter(s -> Integer.parseInt(s.split(",")[1]) >= 24).collect(Collectors.toMap(s -> s.split(",")[0], s -> Integer.parseInt(s.split(",")[1])));System.out.println(map1);//{李四=24, 王五=25}}
}

1.7 stream的综合案例

在这里插入图片描述

package com.itheima.stream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class StreamDemo5 {public static void main(String[] args) {List<String> list1 = new ArrayList<>();list1.add("林菲菲");list1.add("李飞飞");list1.add("林格格");list1.add("黄方面");list1.add("林黛玉十");list1.add("林黛玉");List<String> list2 = new ArrayList<>();list2.add("马大炮");list2.add("猪八戒");list2.add("唐僧");list2.add("孙悟空");list2.add("狗蛋蛋");list2.add("范杰杰");Stream<String> stream1 = list1.stream().filter(v -> v.startsWith("林")).skip(1);Stream<String> stream2 = list2.stream().filter(v -> v.length() == 3).limit(2);List<String> collect = Stream.concat(stream1, stream2).collect(Collectors.toList());//把两个流合并为一个使用concat方法Map<String, Actor> map = new HashMap<>();for (String s : collect) {Actor a = new Actor(s);map.put(s, a);}System.out.println(map);//{林黛玉十=Actor{name='林黛玉十'}, 林格格=Actor{name='林格格'}, 猪八戒=Actor{name='猪八戒'}, 林黛玉=Actor{name='林黛玉'}, 马大炮=Actor{name='马大炮'}}}
}

未完待续。。。。。。

2、File类

在这里插入图片描述

2.1 File类创建文件对象

在这里插入图片描述

package com.itheima.file;
import java.io.File;
import java.io.IOException;public class FileDemo1 {/*** File类介绍 : 文件或文件夹对象** 构造方法 :*         1、public File(String pathname):根据传入的字符串路径封装File对象*         2、public File(String pathname,String child):根据传入的父级路径和子级路径来封装File对象*         3、public File(File parent, String child):根据传入的父级路径(File类型)和子级路径来封装File对象*/public static void main(String[] args) throws IOException {//1、File(String pathname):根据传入的字符串路径封装File对象File f1 = new File("E:\\A.txt");//读取文件对象f1.createNewFile();File f2 = new File("E:\\test");//读取文件夹System.out.println(f2.exists());//存在返回true,不存在返回false//2、File(String pathname,String child):根据传入的父级路径和子级路径来封装File对象File f3 = new File("E:\\", "test");//父路径+子路径,封装File对象System.out.println(f3.exists());//true//3、File(File parent, String child):根据传入的父级路径(File类型)和子级路径来封装File对象File f4 = new File(new File("E:\\"), "test");System.out.println(f4.exists());//true}
}

注意:文件夹路径有相对路径和绝对路径两种写法
在这里插入图片描述

package com.itheima.file;
import java.io.File;
import java.io.IOException;public class FileDemo2 {/*** 路径的写法:*     1、相对路径:相对于当前项目*     2、绝对路径:从盘符根目录开始,一直到某个具体的文件或文件夹*/public static void main(String[] args) throws IOException {//1、相对路径File f1 = new File("A.txt");f1.createNewFile();//2、绝对路径File f2 = new File("E:\\test\\A.txt");}}

2.2 File类的常用方法

在这里插入图片描述

package com.itheima.file;
import java.io.File;
import java.time.LocalDateTime;
import java.util.Date;public class FileDemo3 {/*** File类常见方法:*     1、判断相关*             public boolean isDirectory():判断是否是文件夹*             public boolean isFile():判断是否是文件*             public boolean exists():判断是否存在**     2、获取相关*             public long length():返回文件的大小(字节数量)*                     - 为文件对象时,返回正确的字节数量*                     - 为文件夹对象时,返回错误的字节数量*             public String getAbsolutePath():返回文件的绝对路径*             public String getPath():返回文件使用时的路径*             public String getName():返回文件的名称,带后缀*             public long lastModified():返回文件的最后修改时间(时间毫秒值)*/public static void main(String[] args) {//1、判断相关File f1 = new File("E:\\A.txt");//isDirectory():判断是否是文件夹System.out.println(f1.isDirectory());//isFile():判断是否是文件System.out.println(f1.isFile());//exists():判断是否存在System.out.println(f1.exists());System.out.println("---------------------------------------");//2、获取相关File f2 = new File("E:\\GNN");//length():返回文件的大小(字节数量)System.out.println(f1.length());//为文件对象时,返回正确的字节数量System.out.println(f2.length());//为文件夹对象时,返回错误的字节数量//getAbsolutePath():返回文件的绝对路径System.out.println(f1.getAbsoluteFile());//E:\A.txtSystem.out.println(f2.getAbsoluteFile());//E:\GNN//getPath():返回文件使用时的路径System.out.println(f1.getPath());//E:\A.txtSystem.out.println(f2.getPath());//E:\GNN//getName():返回文件的名称,带后缀System.out.println(f1.getName());//A.txtSystem.out.println(f2.getName());//GNN//lastModified():返回文件的最后修改时间(时间毫秒值)System.out.println(f1.lastModified());//1721657586035System.out.println(f2.lastModified());//1601530884989System.out.println(new Date(f2.lastModified()));//Thu Oct 01 13:41:24 CST 2020}
}

在这里插入图片描述

package com.itheima.file;
import java.io.File;
import java.util.Scanner;public class FileDemo4 {public static void main(String[] args) {File dir = getDir();System.out.println(dir);}public static File getDir(){Scanner sc = new Scanner(System.in);System.out.println("请输入文件路径:");while (true) {String dir = sc.nextLine();File f = new File(dir);if (!f.exists()) {System.out.println("你输入的文件路径不存在,请重新输入!");} else if (f.isFile()) {System.out.println("你输入的是一个文件,请重新输入!");} else {return f;}}}
}

2.3 File类的创建和删除方法

在这里插入图片描述

package com.itheima.file;import java.io.File;
import java.io.IOException;public class FileDemo5 {/*** File类的创建方法和删除方法:*     public boolean createNewFile():创建文件*     public boolean mkdir():创建单极文件夹*     public boolean mkdirs():创建多极文件夹*     public boolean delete():删除文件或文件夹*             - delete 方法删除文件夹时,只能删除空的文件夹*/public static void main(String[] args) throws IOException {//1、createNewFile():创建文件File f1 = new File("A.txt");System.out.println(f1.createNewFile());//不存在则创建文件并返回true,存在则返回false//2、mkdir():创建单极文件夹File f2 = new File("aaa");System.out.println(f2.mkdir());//不存在则创建文件夹并返回true,存在则返回false//3、mkdirs():创建多极文件夹File f3 = new File("bbb\\ccc\\ddd");System.out.println(f3.mkdirs());不存在则创建文件夹并返回true,存在则返回false//4、delete():删除文件或文件夹System.out.println(f1.delete());//存在则删除并返回true,否则返回false}
}

2.4 File类的遍历方法

在这里插入图片描述

注意:
在这里插入图片描述

package com.itheima.file;import java.io.File;public class FileDemo6 {/*** File类的遍历方法:*         public File[] listFiles():获取当前目录下所有的 ”一级文件对象“ 返回File数组*/public static void main(String[] args) {File f1 = new File("C:\\Users\\MSZ\\Desktop\\java_test\\dev\\day12-code");File[] files = f1.listFiles();for (File file : files) {System.out.println(file);}}
}

练习一:

需求:键盘录入一个文件夹路径,找出这个文件夹下所有的 .java 文件

package com.itheima.file;
import java.io.File;
import java.util.Scanner;public class FileDemo7 {/*** 需求:键盘录入一个文件夹路径,找出这个文件夹下所有的 .java 文件*/public static void main(String[] args) {//1、获取文件夹路径File dir = getDir();//2、找出文件夹下的.java文件for (File file : dir.listFiles()) {if (file.isFile() && file.getName().endsWith(".java")){System.out.println(file);}}}public static File getDir(){Scanner sc = new Scanner(System.in);System.out.println("请输文件夹路径:");while (true) {String path = sc.nextLine();File f = new File(path);if (f.isFile()){System.out.println("您输入的是一个文件,请重新输入!");} else if (!f.exists()) {System.out.println("您输入的问价夹不存在,请重新输入!");}else {return f;}}}
}

上述方法如果遇到多级文件夹下还有.java文件,那就获取不到了,于是我们可以使用递归来解决这个问题:

package com.itheima.file;
import java.io.File;
import java.util.Scanner;public class FileDemo7 {/*** 需求:键盘录入一个文件夹路径,找出这个文件夹下所有的 .java 文件*/public static void main(String[] args) {File dir = getDir();printJavaFile(dir);}public static void printJavaFile(File dir){//1、获取当前路径下的文件夹和文件的对象File[] files = dir.listFiles();//2、遍历数组对象for (File file : files) {//3、如果.java文件则打印if (file.isFile() && file.getName().endsWith(".java")){System.out.println(file);} else if (file.isDirectory()) {//4、如果是文件夹,则递归调用自身继续找.java文件if (file.listFiles() != null){printJavaFile(file);}}}}public static File getDir(){Scanner sc = new Scanner(System.in);System.out.println("请输文件夹路径:");while (true) {String path = sc.nextLine();File f = new File(path);if (f.isFile()){System.out.println("您输入的是一个文件,请重新输入!");} else if (!f.exists()) {System.out.println("您输入的问价夹不存在,请重新输入!");}else {return f;}}}
}

练习二:

在这里插入图片描述

package com.itheima.file;
import java.io.File;
import java.util.Collections;public class FileDem8 {/*** 需求:设计一个方法,删除文件夹(delete()只能删除空文件夹)*/public static void main(String[] args) {File f = new File("C:\\Users\\MSZ\\Desktop\\java_test\\dev\\test111");deleteDir(f);}public static void deleteDir(File file){//获取文件夹下所有的文件对象File[] files = file.listFiles();for (File f : files) {if (f.isFile()){//如果是文件则直接删除f.delete();}else {//非空文件夹,递归删除if (f.listFiles() != null){deleteDir(f);}}}//循环结束了,表明已经是空文件夹了,则删除此文件夹file.delete();}
}

练习三:

在这里插入图片描述

package com.itheima.file;
import java.io.File;public class FileDem9 {/*** 需求:键盘录入一个二五年间加路径,统计文件夹的大小*         -length()方法只能获取文件的大小,不能获取文件夹的大小*/public static void main(String[] args) {long dirSize = getDirSize(new File("C:\\Users\\MSZ\\Desktop\\java_test\\dev\\code"));System.out.println(dirSize);}public static long getDirSize(File file){long length = 0L;File[] files = file.listFiles();for (File f : files) {if (f.isFile()){//是文件,则获取文件的大小length += f.length();}else {//是文件夹,则递归获取里面的文件大小if (f.listFiles() != null){length += getDirSize(f);}}}return length;}
}

练习四:

在这里插入图片描述

package com.itheima.file;
import java.io.File;
import java.util.HashMap;
import java.util.Map;public class FileDem10 {/*** 需求:键盘录入一个文件夹路径,统计文件夹中每种文件的个数并打印(考虑子文件夹)* 打印格式如下:*           txt:3个*           doc:4个*           jpg:6个*/static int count = 0;//统计没有后缀名的文件static Map<String, Integer> map = new HashMap<>();//存放结果public static void main(String[] args) {Map<String, Integer> fileNum = getFileNum(new File("C:\\Users\\MSZ\\Desktop\\java_test\\dev\\code"));fileNum.forEach((k, v) -> System.out.println(k + ":" + v + "个"));System.out.println("没有后缀的文件:" + count);}public static Map<String, Integer> getFileNum(File file){//获取当前目录下所有的 ”一级文件对象“ 返回File数组File[] files = file.listFiles();for (File f : files) {if (f.isFile()){//如果是文件,则对应类型的值+1String name = f.getName();if (name.contains(".")){//文件有后缀String[] split = name.split("\\.");String key = split[split.length - 1];if (map.containsKey(key)){map.put(key, map.get(key) + 1);}else {map.put(key, 1);}}else {//文件没有后缀,单独统计count++;}}else {//如果是文件夹,则递归获取if (f.listFiles() != null){getFileNum(f);}}}return map;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS实现表格无限轮播

<div className{styles.tableTh}><div className{styles.thItem} style{{ width: 40% }}>报警名称</div><div className{styles.thItem} style{{ width: 35% }}>开始时间</div><div className{styles.thItem} style{{ width: 25% }}>状态&…

rk3588s 定制版 USB adb , USB2.0与USB3.0 区别,adb 由typeC 转换到USB3.0(第二部分)

硬件资源&#xff1a; rk3588s 核心板定制的地板 软件资源&#xff1a; 网盘上的 android12 源码 1 硬件上 客户只想使用 type c 接口中的 usb2.0 OTG 。在硬件上&#xff0c;甚至连 CC芯片都没有连接。 关于一些前置的知识。 1 USB2.0 与 USB3.0 的区别。 usb3.0 兼容2.0 …

mysql面试(二)

前言 这是mysql面试基础的第二节&#xff0c;主要是了解一下mysql数据更新的基本流程&#xff0c;还有三大日志的作用。但是具体的比如undolog是如何应用在mvcc机制中的&#xff0c;由于篇幅问题就放在下一在章节 数据更新流程 上面是说了更新真正数据之前的大致流程&#x…

邮件安全篇:如何防止邮件泄密?

本文主要讨论组织内部用户违反保密规定通过邮件泄密的场景。其他场景导致邮箱泄密的问题&#xff08;如账号被盗、邮件系统存在安全漏洞等&#xff09;不在本文的讨论范围。本文主要从邮件系架构设计、邮件数据防泄漏系统、建立健全规章制度、安全意识培训等方面分别探讨。 1. …

sql-libs通关详解

1-4关 1.第一关 我们输入?id1 看回显&#xff0c;通过回显来判断是否存在注入&#xff0c;以及用什么方式进行注入&#xff0c;直接上图 可以根据结果指定是字符型且存在sql注入漏洞。因为该页面存在回显&#xff0c;所以我们可以使用联合查询。联合查询原理简单说一下&…

科研绘图系列:R语言组合堆积图(stacked barplot with multiple groups)

介绍 通常堆积图的X轴表示样本,样本可能会存在较多的分组信息,通过组合堆积图和样本标签分组信息,我们可以得到一张能展示更多信息的可发表图形。 加载R包 knitr::opts_chunk$set(warning = F, message = F) library(tidyverse) library(cowplot) library(patchwork)导入…

【React】JSX:从基础语法到高级用法的深入解析

文章目录 一、什么是 JSX&#xff1f;1. 基础语法2. 嵌入表达式3. 使用属性4. JSX 是表达式 二、JSX 的注意事项1. 必须包含在单个父元素内2. JSX 中的注释3. 避免注入攻击 三、JSX 的高级用法1. 条件渲染2. 列表渲染3. 内联样式4. 函数作为子组件 四、最佳实践 在 React 开发中…

科研绘图系列:R语言组合热图和散点图

介绍 热图展示参与者的属性,散点图表示样本的时间跨度。 加载R包 library(tidyverse) library(ComplexHeatmap) library(circlize) library(cowplot)导入数据 数据可从以下链接下载(画图所需要的所有数据): 百度云盘链接: https://pan.baidu.com/s/1iEE9seTLdrrC3WDHJy…

P2p网络性能测度及监测系统模型

P2p网络性能测度及监测系统模型 网络IP性能参数 IP包传输时延时延变化误差率丢失率虚假率吞吐量可用性连接性测度单向延迟测度单向分组丢失测度往返延迟测度 OSI中的位置-> 网络层 用途 面相业务的网络分布式计算网络游戏IP软件电话流媒体分发多媒体通信 业务质量 通过…

富唯智能转运机器人:高效、智能、未来的选择

在现代工业中&#xff0c;高效的物流和物料处理是提升生产效率的关键。富唯智能转运机器人&#xff0c;以其卓越的技术和智能化的设计&#xff0c;为各行业提供了完美的解决方案。 产品概述 富唯智能转运机器人搭载ICD系列核心控制器&#xff0c;拥有多种移载平台&#xff0c…

学习记录day18——数据结构 算法

算法的相关概念 程序 数据结构 算法 算法是程序设计的灵魂&#xff0c;结构式程序设计的肉体 算法&#xff1a;计算机解决问题的方法护额步骤 算法的特性 1、确定性&#xff1a;算法中每一条语句都有确定的含义&#xff0c;不能模棱两可 2、有穷性&#xff1a;程序执行一…

Kafka知识总结(基本介绍+基本概念)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 消息队列应用场景&#xff1a; 通过异步处理提高系统性能&#xf…

3GPP眼中的XR及其技术特点

3GPP R18 支持了XR Services。XR需要高数据速率和低延迟通信&#xff0c;这也真是5G可以大展身手的地方。这篇就从3GPP的角度看下XR是什么以及XR有哪些技术特点。 Extended Reality (XR) 是指由计算机技术和可穿戴设备生成的所有现实与虚拟相结合的环境和人机交互技术。 实际上…

【相机与图像】1. 相机模型的介绍:内参、外参、畸变参数

想着整理下相机模型&#xff08;内容上参考 slam十四讲&#xff09;、相机的内外参标定。方便自己的使用和回顾。 不过&#xff0c;内外参标定啥时候记录随缘 -_- 概述 【构建相机模型】 相机将三位世界中的坐标点&#xff08;单位为米&#xff09;映射到二维图像平面&#xff…

项目实战二

Git 服务器 公共代码平台GitLab 配置gitlab 1.设置管理员帐号密码 2.让程序员传代码到20主机上需要配置&#xff1a; 创建用户 mark 1234.com 创建用户组devops 然后把mark 添加到devons 创建项目 http://192.168.88.20/devops/myproject.git 3.客户端操作&#x…

大数据、区块链与人工智能

大数据、区块链与人工智能&#xff1a;技术融合与未来展望 摘要 本文旨在探讨大数据、区块链和人工智能这三个技术领域的基本概念、发展历程、应用场景及其相互之间的融合。文章首先分别介绍这三个技术的定义和特点&#xff0c;然后分析它们在不同行业中的实际应用&#xff0…

mac下010editor的配置文件路径

1.打开访达&#xff0c;点击前往&#xff0c;输入~/.config 2.打开这个文件夹 把里面的 010 Editor.ini 文件删除即可&#xff0c;重新安装010 Editor即可

SpringSecurity如何正确的设置白名单

在SpringSecurity中,往往需要对部分接口白名单访问,而大部分在使用Security中就有一个误区,那就是免鉴权访问和白名单的区别。 大部分的Security文章包括官方文档给出免鉴权访问都是使用.permitAll()去对相应路径进行免鉴权访问,但实际上这仅仅只表示该资源不需要相应的权限访问…

k8s 公共服务

修改named.conf。修改第13行和第21行 下面是 named.rfc1912 修改位置&#xff0c;在最后 所以用cp -p 复制文件&#xff0c;保留权限 nslookup 回车&#xff0c;server是看哪个dns 在起作用 dns服务器要配置给所有公共服务节点和 k8s 节点 就在网络文件加个DNS2就行了&…

【人工智能】AI音乐创作兴起与AI伦理的新视角

文章目录 &#x1f34a;AI音乐创作&#xff1a;一键生成&#xff0c;打造你的专属乐章&#x1f34a;1 市面上的AI音乐应用1.1 Suno AI1.2 网易天音 &#x1f34a;2 AI音乐创作的流程原理(直接制作可跳到第3点)2.1 AI音乐流派2.2 AI音乐风格2.3 AI音乐的结构顺序2.5 选择AI音乐乐…