JavaDay17

创建不可变集合

 

import java.util.Iterator;
import java.util.List;public class Test {public static void main(String[] args) {/*创建不可变的List集合* "张三"  "李四"  "王五"  "赵六*///一旦创建之后 是无法进行修改的 在下面的代码中 只能进行查询操作List<String> list = List.of("张三", "李四", "王五", "赵六");System.out.println(list.get(0));System.out.println(list.get(1));System.out.println(list.get(2));System.out.println(list.get(3));System.out.println("-----------------------");for (String s : list) {System.out.println(s);}System.out.println("-----------------------");Iterator<String> it = list.iterator();while(it.hasNext()){String s = it.next();System.out.println(s);}System.out.println("------------------------");for(int i=0;i<list.size();i++){String s = list.get(i);System.out.println(s);}System.out.println("-----------------------");//        list.remove("李四");
//        list.add("aa");
//        list.set("aa");
import java.util.Iterator;
import java.util.Set;public class Test {public static void main(String[] args) {/*创建不可变的Set集合* "张三","李四","王五","赵六"* 细节:set ->元素唯一* 当我们要获得一个不可变的Set集合时 元素不可以重复* * */Set<String> set = Set.of("张三", "李四", "王五", "赵六");for (String s : set) {System.out.println(s);}System.out.println("-----------------");Iterator<String> it = set.iterator();while(it.hasNext()){String s =it.next();System.out.println(s);}System.out.println("-----------------");//set.remove("王五");}
}
import java.util.Map;
import java.util.Set;public class Test {public static void main(String[] args) {/*创建Map的不可变集合* "张三","南京","李四","北京,"王五","上海","赵六","广州","赵六"**"广州","孙七","深圳","周八","杭州"*细节:键是不能重复的*细节:Map里面的of方法,参数是有上限的,最多只能传递20个参数,10个键值对*细节:如果我们要传递多个键值对对象 数量大于10个 在Map接口中还有一个方法*ofEntries** */Map<String,String>map=Map.of("张三","南京","广州","赵六");//一旦穿件完毕不可修改 只能进行查询操作Set<String>keys=map.keySet();for(String key:keys){String value = map.get(key);System.out.println(key+"="+value);}System.out.println("------------------------------");Set<Map.Entry<String, String>> entries = map.entrySet();for (Map.Entry<String, String> entry : entries) {String key= entry.getKey();String value = entry.getValue();System.out.println(key+"="+value);}System.out.println("------------------------------");}//如果我想让这个方法能够接受多个键和值//解决方案://键 可变参数  值:可变参数//类型不确定:泛型方法//一个形参里面的可变参数要写在后面 而且参数里面最多只有一个可变参数
//    public static<K,V> void of(K...keys,V...values){
//        //不能这样设置
//    }
}
import java.util.HashMap;
import java.util.Map;public class Demo1 {public static void main(String[] args) {//创建Map的不可变集合 键值对的数量超过10个//1创建一个Map集合HashMap<String,String>hm = new HashMap<>();hm.put("张三","南京");hm.put("李四","北京");hm.put("王五","上海");hm.put("赵六","湖北");hm.put("1","11");hm.put("2","22");hm.put("3","33");hm.put("4","44");hm.put("5","55");hm.put("6","66");//2.利用上面的数据来获取一个不可变的集合//        //获取到所有的键值对对象(Entry对象)
//        Set<Map.Entry<String, String>> entries = hm.entrySet();
//        //把entries变成一个数组
//        //Map.Entry[] arr = entries.toArray(new Map.Entry[0]);
//
//        Object[] objects = entries.toArray();
//for (Object object : objects) {System.out.println(object);}//但是类型是object
//
//        //数组指定类型
//        Map.Entry[] arr1 = new Map.Entry[0];//
//        //toArray方法在底层会比较集合的长度跟数组的长度两者大小
//        //如果集合的长度>数组的长度:数据在数组中放不下,此时会根据实际数据的个数,重新创建数组
//        //如果集合的长度<=数组的长度:数据在数组中放的下 不会创建新的数组 直接用
//
//        Map.Entry[] arr2 = entries.toArray(arr1);
//        //不可变的map集合
//        Map map = Map.ofEntries(arr2);//简化代码
//        Map<Object, Object> map = Map.ofEntries(hm.entrySet().toArray(new Map.Entry[0]));
//        map.put("bbb","222");//copyOf - JDK10Map<String, String> map = Map.copyOf(hm);}
}

 

Stream流

public class Test {public static void main(String[] args) {ArrayList<String> list1 = new ArrayList<>();list1.add("张无忌");list1.add("周芷若");list1.add("赵敏");list1.add("张强");list1.add("张三丰");list1.stream().filter(name->name.startsWith("张")).filter(name->name.length()==3).forEach(name-> System.out.println(name));//        //把所有以张开头的放到新的集合
//        ArrayList<String> list2 = new ArrayList<>();
//
//        for (String name : list1) {
//            if (name.startsWith("张")) {
//                list2.add(name);
//            }
//        }
//        //System.out.println(list2);
//
//        //把"张"开头的,长度为3的元素再存储到新集合中
//        ArrayList<String> list3 = new ArrayList<>();
//        for (String name : list2) {
//            if (name.length() == 3) {
//                list3.add(name);
//            }
//        }
//        //3.遍历打印最终的结果
//        for (String name : list3) {
//            System.out.println(name);
//        }
//}
}

 

 

单列集合

import java.util.ArrayList;
import java.util.Collections;public class Test {public static void main(String[] args) {//1.单列集合获取Stream流ArrayList<String>list =new ArrayList<>();Collections.addAll(list,"a","b","c","d","e");//获取一条流水线 并把集合中的数据放到流水线上
//        Stream<String> stream1 = list.stream();
//        //使用终结方法打印一下流水线上面的数据
//        stream1.forEach(new Consumer<String>() {
//            @Override
//            public void accept(String s) {
//                //s:依次表示流水线上的每一个数据
//                System.out.println(s);
//            }
//        });list.stream().forEach(s-> System.out.println(s));}
}

双列集合 

import java.util.HashMap;public class Test {public static void main(String[] args) {//双列集合//1.创建双列集合HashMap<String,Integer>hm = new HashMap<>();//2.添加数据hm.put("aaa",111);hm.put("bbb",222);hm.put("ccc",333);hm.put("ddd",444);//3.第一种获取stream流hm.keySet().stream().forEach(s-> System.out.println(s));//4.第二种获取hm.entrySet().stream().forEach(s-> System.out.println(s));}
}

 数组

public class Test {public static void main(String[] args) {//1.创建数组int[] arr ={1,2,3,4,5,6,7,8,9,10};//2.获取stream流Arrays.stream(arr).forEach(s-> System.out.println(s));String[] arr2 ={"a","b","c"};Arrays.stream(arr2).forEach(s-> System.out.println(s));}
}

 一堆零散数据

import java.util.stream.Stream;public class Test {public static void main(String[] args) {//一堆零散数据Stream.of(1,2,3,4,5).forEach(s-> System.out.println(s));Stream.of("a","b","c","d","e").forEach(s-> System.out.println(s));//注意://stream接口中静态方法of的细节//方法的形参是一个可变参数 可以传递一堆零散的数据 也可以传递数组//但是数组必须是引用数据类型的 如果传递基本数据类型 是把整个数组当做//一个元素 放到stream流}
}

 

import java.util.ArrayList;
import java.util.Collections;public class Test {public static void main(String[] args) {ArrayList<String>list = new ArrayList<>();Collections.addAll(list,"111","222","333","444","555","666");//filter 过滤
//        list.stream().filter(new Predicate<String>() {
//            @Override
//            public boolean test(String s) {
//                //如果返回值为true 表示当前数据留下
//                //如果返回值为false 表示当前数据舍弃不要
//
//                return s.startsWith("6");
//            }
//        }).forEach(s -> System.out.println(s));//666//        list.stream().filter(s->s.startsWith("6")).forEach(s-> System.out.println(s));
//        System.out.println(list);// list.stream().limit(3).forEach(s-> System.out.println(s));//   list.stream().skip(4).forEach(s-> System.out.println(s));//获取444 555 666list.stream().limit(6).skip(3).forEach(s-> System.out.println(s));}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.stream.Stream;public class Test {public static void main(String[] args) {ArrayList<String>list1 = new ArrayList<>();Collections.addAll(list1,"111","111","222","333","444","555","666");ArrayList<String>list2=new ArrayList<>();Collections.addAll(list2,"999","888");list1.stream().distinct().forEach(s-> System.out.println(s));//元素去重 一来(HashCode和equals方法)Stream.concat(list1.stream(),list2.stream()).forEach(s-> System.out.println(s));}
}

 

import java.util.ArrayList;
import java.util.Collections;
import java.util.function.Function;public class Test {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();Collections.addAll(list, "张-11", "杨-19", "李-29", "咩-23");//只获取里面的年龄并且打印//String->int//第一个数据类型:流中原本的数据类型//第二个数据类型:要转成的类型//apply的形参s:依次表示流里面的每一个数据//返回值:表示转换之后的数据//当map方法执行完毕后 流上的数据变成了整数//所以当下面的forEach当中 s依次表示流里的每一个数据,这个数据现在就是整数了list.stream().map(new Function<String, Integer>() {@Overridepublic Integer apply(String s) {String[] arr = s.split("-");String ageString = arr[1];int age =Integer.parseInt(ageString);return age;}}).forEach(s-> System.out.println(s));list.stream().map(s->Integer.parseInt(s.split("-")[1])).forEach(s-> System.out.println(s));}
}

 

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;public class Test {public static void main(String[] args) {ArrayList<String>list=new ArrayList<>();Collections.addAll(list,"111","222","333","444","555");//遍历 -底层是函数式接口 -要改成Lambda表达式//Consumer的泛型:表示流中数据的类型//accept方法的形参s:依次表示流里面的每一个数据//方法体:对每一天数据的处理操作(打印)
//        list.stream().forEach(new Consumer<String>() {
//            @Override
//            public void accept(String s) {
//                System.out.println(s);
//            }
//        });//list.stream().forEach(s-> System.out.println(s));//count//        long count = list.stream().count();
//        System.out.println(count);//toArray  手机流中的数据 放到数组中
//        Object[] arr1 = list.stream().toArray();
//        System.out.println(Arrays.toString(arr1));//InFunction的泛型:具体类型的数组//apply的形参:流中数据的个数,要跟数组的长度保持一致//apply的返回值:具体类型的数组//方法体:创建数组//toArray方法的参数的作用,负责创建一个指定类型的数组//toArray方法的底层,会依次得到流里面的每一个数据 并把数据放到数组当中//toArray方法的返回值:是一个装着流里面所有数据的数组
//        String[] arr = list.stream().toArray(new IntFunction<String[]>() {
//            @Override
//            public String[] apply(int value) {
//                return new String[value];
//            }
//        });
//        System.out.println(Arrays.toString(arr));String[] arr2 = list.stream().toArray(value -> new String[value]);System.out.println(Arrays.toString(arr2));}
}

 

import java.util.*;
import java.util.stream.Collectors;public class Test {public static void main(String[] args) {ArrayList<String>list=new ArrayList<>();Collections.addAll(list,"111-男-yjy","222-男-yyy","333-女-sss","444-男-ppp","555-男-nnn");//收集List当中 所有的男性//s:依次表示流水线上面的数据List<String> newList = list.stream().filter(s -> "男".equals(s.split("-")[1])).collect(Collectors.toList());//System.out.println(newList);//收集到set集合当中Set<String> newList2 = list.stream().filter(s -> "男".equals(s.split("-")[1])).collect(Collectors.toSet());//System.out.println(newList2);//搜集到List和set有什么区别?set->去重//收集到Map当中//谁作为键,谁作为值.//把所有男性手机起来//键:姓名 值:年龄/** toMap:参数一:键的生成规则* 参数二:表示值的生成规则* 参数一:Function泛型一:表示流中每一个数据的类型*               泛型二:表示Map集合中键的数据类型* 方法:apply形参:依次表示流里面的每一个数据** //方法体:生成键的代码'* 返回值:已经生成的键** 参数二:* Function泛型一:表示流中每一个数据的类型*  泛型二:表示Map集合中值的数据类型*** 方法:apply形参:依次表示流里面的每一个数据** //方法体:生成值的代码'* 返回值:已经生成的值*** */
//        Map<String, Integer> map = list.stream().filter(s -> "男".equals(s.split("-")[1]))
//                .collect(Collectors.toMap(new Function<String, String>() {
//                                              @Override
//                                              public String apply(String s) {
//                                                  return s.split("-")[0];
//
//                                              }
//                                          },
//                        new Function<String, Integer>() {
//                            @Override
//                            public Integer apply(String s) {
//                                return Integer.parseInt(s.split("-")[2]);
//
//                            }
//                        }));
//
//
//        System.out.println(map);Map<String,Integer> map = list.stream().filter(s->"男".equals(s.split("-")[1])).collect(Collectors.toMap(s->s.split("-")[0],s->Integer.parseInt(s.split("-")[2])));System.out.println(map);}
}

 

 

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;public class Test {public static void main(String[] args) {ArrayList<Integer>list=new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);list.add(6);list.add(7);list.add(8);list.add(9);list.add(10);//Collections.addAll(list,1,2,3,4,5,6,7,8,9,10);List<Integer> newList = list.stream().filter(n -> n % 2 == 0).collect(Collectors.toList());System.out.println(newList);}
}

 

import java.util.ArrayList;
import java.util.Map;
import java.util.stream.Collectors;public class Test {public static void main(String[] args) {ArrayList<String>list=new ArrayList<>();list.add("zhangsan,23") ;list.add("lisi,24");list.add("wangwu,25");//System.out.println(list);//        list.stream().filter(s->Integer.parseInt(s.split(",")[1])>=24)
//                .collect(Collectors.toMap(new Function<String, String>() {
//                    @Override
//                    public String apply(String s) {
//                        return s.split(",")[0];
//                    }
//                }, new Function<String, Integer>() {
//                    @Override
//                    public Integer apply(String s) {
//                        return Integer.parseInt(s.split(",")[1]);
//                    }
//                }));Map<String, Integer> map = list.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(map);}
}

 

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class Test {public static void main(String[] args) {//1.创建两个集合ArrayList<String>manList=new ArrayList<>();ArrayList<String>womenList=new ArrayList<>();//添加数据Collections.addAll(manList,"言热额,12","叶的的,22","李人,44","得到,14","隐覆盖,99");Collections.addAll(womenList,"赵,35","杨1,37","高,54","张,84","杨2,90");//男演员只要名字为三个字的前两个Stream<String> stream1 = manList.stream().filter(s -> s.split(",")[0].length() == 3).limit(2);//女演员只要姓杨的 且不要第一个Stream<String> stream2 = womenList.stream().filter(s -> s.split(",")[0].startsWith("杨")).skip(1);//把过滤后的两个流和在一起//演员信息封装成为actor对象(类型转换)//Actor里面有姓名和年龄
//        Stream.concat(stream1,stream2).map(new Function<String, Actor>() {
//            @Override
//            public Actor apply(String s) {
//                String name = s.split(",")[0];
//                int age = Integer.parseInt(s.split(",")[1]);
//                return new Actor(name,age);
//
//            }
//        }).forEach(s-> System.out.println(s));List<Actor> LIST = Stream.concat(stream1, stream2).map(s -> new Actor(s.split(",")[0], Integer.parseInt(s.split(",")[1]))).collect(Collectors.toList());System.out.println(LIST);}
}

方法引用 

 

import java.util.Arrays;public class Test {public static void main(String[] args) {//需求:创建一个数组,进行倒序排列Integer[] arr ={3,5,4,1,6,2};//匿名内部类
//        Arrays.sort(arr, new Comparator<Integer>() {
//            @Override
//            public int compare(Integer o1, Integer o2) {
//                return o2-o1;
//            }
//        });//System.out.println(Arrays.toString(arr));//Lambda表达式//因为第二个参数的类型是Comparator是一个函数式接口
//        Arrays.sort(arr,(Integer o1, Integer o2)->{
//            return o2-o1;
//        });//Lambda表达式简化格式Arrays.sort(arr,(o1,o2)->o2-o1);//方法引用//1.引用处必须是函数式接口//2.被引用的方法需要已经存在//3.被引用方法的形参和返回值需要跟抽象方法的形参和返回值保持一致//4.被引用的方法的功能需要满足当前的要求//表示引用Test类里面Substraction方法//把这个方法当做抽象方法的方法体Arrays.sort(arr,Test::Substraction);System.out.println(Arrays.toString(arr));}//静态方法要用类名调用//可以是Java已经写好的 也可以是一些第三方的工具类public static int Substraction(int num1,int num2){return num2-num1;}}

 

 

import java.util.ArrayList;
import java.util.Collections;public class Test {public static void main(String[] args) {//创建集合并添加元素ArrayList<String>list=new ArrayList<>();Collections.addAll(list,"1","2","3","4","5");//常规方法
//        ArrayList<Integer>list2=new ArrayList<>();
//        for (String s : list) {
//            int i=Integer.parseInt(s);
//            list2.add(i);
//        }//        list.stream().map(new Function<String, Integer>() {
//            @Override
//            public Integer apply(String s) {
//                int i = Integer.parseInt(s);
//                return i;
//            }
//        }).forEach(s-> System.out.println(s));list.stream().map(Integer::parseInt).forEach(s-> System.out.println(s));}}

 

import java.util.ArrayList;
import java.util.Collections;public class Test {public static void main(String[] args) {//1.创建集合ArrayList<String>list = new ArrayList<>();//2.添加数据Collections.addAll(list,"张无忌","周芷若","赵敏","张强","张三丰");//3.过滤数据("张"开头 而且名字是3个字的)//list.stream().filter(s->s.startsWith("张")).filter(s->s.length()==3).forEach(s-> System.out.println(s));//        list.stream().filter(new Predicate<String>() {
//            @Override
//            public boolean test(String s) {
//                return s.startsWith("张")&&s.length()==3;
//            }
//        }).forEach(s-> System.out.println(s));// list.stream().filter(new StringOperation()::StringJudge).forEach(s-> System.out.println(s));//静态方法中是没有this的 所以这里不能写thislist.stream().filter(new Test()::stringJudge).forEach(s-> System.out.println(s));}public boolean stringJudge(String s){return s.startsWith("张")&&s.length()==3;}}

  

package Day17;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) {//引用构造方法//1.创建集合对象ArrayList<String> list = new ArrayList<>();//添加对象Collections.addAll(list, "张无忌,15", "周芷若,14", "赵敏,13");
//        //封装成Student对象并收集到List集合当中
//        List<Student> newList = list.stream().map(new Function<String, Student>() {
//            @Override
//            public Student apply(String s) {
//                String[] arr = s.split(",");
//                String name = arr[0];
//                int age = Integer.parseInt (arr[1]);
//                return new Student(name, age);
//            }
//        }).collect(Collectors.toList());
//
//        System.out.println(newList);
//    }List<Student> newList2 = list.stream().map(Student::new).collect(Collectors.toList());System.out.println(newList2);}}

 

import java.util.ArrayList;
import java.util.Collections;public class Test {public static void main(String[] args) {/*方法引用的规则:* 1.需要有函数式接口* 2.被引用的方法必须已经存在* 3.被引用方法的形参,需要跟抽象方法的第二个形参保持一致,返回值需要保持一致.* 4.被引用方法的功能需要满足当前的需求* * 抽象方法形参的详解:* 第一个参数:表示引用方法的调用者,决定了可以引用哪些类中的方法* 在Stream流当中 第一个参数一般都表示流里面的每一个数据* 假设流里面的数据都是字符串,那么使用这种方式进行方法引用,只能引用String这个类中的方法* * 第二个参数到最后一个参数,跟被引用方法的形参保持一致,如果没有第二个参数 说明被应用的方法需要无参的成员方法* * 局限性:* 不能引用所有类中的成员方法* 是跟抽象方法的第一个参数有关 这个参数是什么类型的 那么就只能引用这个类中的方法* *///类名引用成员方法//1.创建集合对象ArrayList<String>list = new ArrayList<>();Collections.addAll(list,"aaa","bbb","ccc","ddd");
//        list.stream().map(new Function<String, String>() {@Overridepublic String apply(String s) {return s.toUpperCase();}}).forEach(s-> System.out.println(s));//方法引用list.stream().map(String::toUpperCase).forEach(s-> System.out.println(s));}
}

 

 

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

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

相关文章

Nginx的location和rewrite的使用

目录 常用的Nginx 正则表达式 location location 大致可以分为三类&#xff1a; 精准匹配&#xff1a;location / {...} 一般匹配&#xff1a;location / {...} 正则匹配&#xff1a;location ~ / {...} location 常用的匹配规则 location 优先级 location 示例说明…

23种设计模式之模板方法模式(模板模式)

23种设计模式之模板方法模式(模板模式) 文章目录 23种设计模式之模板方法模式(模板模式)设计思想模板方法的优缺点模板方法模式的缺点代码解析小结 设计思想 原文:定义一个操作中的算法的骨架&#xff0c;而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构…

jsp文件引用的css修改后刷新不生效问题

问题 在对 JavaWeb 项目修改的过程中&#xff0c;发现修改了 jsp 文件引入的 css 文件的代码后页面的样式没有更新的问题。 原因 导致这个问题的原因可能是因为浏览器缓存的问题。 解决方法 下面介绍两种解决方法&#xff0c;供大家参考&#xff1a; 1、给 link 标签的 c…

件夹和文件比较软件VisualDiffer mac功能介绍

VisualDiffer mac是一款运行在MacOS上的文件夹和文件快速比较工具。VisualDiffer可以对不同文件夹中文件或文档做出比较或者比较两个文件的路径。还可以通过UNIS diff命令快速、标准和可靠的比较出各类不同的文件夹和文件结果&#xff0c;使用不同的颜色直观地显示。 VisualDif…

网络基础(五):网络层协议介绍

目录 一、网络层 1、网络层的概念 2、网络层功能 3、IP数据包格式 二、ICMP协议 1、ICMP的作用和功能 2、ping命令的使用 2.1ping命令的通用格式 2.2ping命令的常用参数 2.3TypeCode&#xff1a;查看不同功能的ICMP报文 2.4ping出现问题 3、Tracert 4、冲突域 5、…

GoLong的学习之路,进阶,微服务之序列化协议,Protocol Buffers V3

这章是接上一章&#xff0c;使用RPC包&#xff0c;序列化中没有详细去讲&#xff0c;因为这一块需要看的和学习的地方很多。并且这一块是RPC中可以说是最重要的一块&#xff0c;也是性能的重要影响因子。今天这篇主要会讲其使用方式。 文章目录 Protocol Buffers V3 背景以及概…

安装ThingBox Eclipse Plugin

1. ChatGPT问 The latest version of the ThingBox Eclipse Plugin requires Eclipse IDE 2021-06 or later. 2. PTC官网下载 MED-61378-CD-092_F000_Eclipse-Plugin-9-0-1.zip文件, 和 MED-61098-CD-085_F000_ThingWorx-Extension-SDK-8-5-0&#xff08;需要账号&#xff09…

深入理解模板引擎:解锁 Web 开发的新境界(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

STM32-固件打包部署

STM32-固件打包部署 Fang XS.1452512966qq.com STM32固件输出 工程上使用Keil开发STM32软件&#xff1b;在调试过程中&#xff0c;可直接编译下载&#xff1b;例如bootloader和APP&#xff0c;在调试时&#xff0c;可以直接下载2次&#xff1b;但是工程上&#xff0c;需要大…

多维时序 | MATLAB实现RIME-CNN-BiLSTM-Multihead-Attention多头注意力机制多变量时间序列预测

多维时序 | MATLAB实现RIME-CNN-BiLSTM-Multihead-Attention多头注意力机制多变量时间序列预测 目录 多维时序 | MATLAB实现RIME-CNN-BiLSTM-Multihead-Attention多头注意力机制多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现RIME-…

先进的Web3.0实战热门领域NFT项目几个总结分享

非同质化代币&#xff08;NFT&#xff09;的崛起为游戏开发者提供了全新的机会&#xff0c;将游戏内物品和资产转化为真正的可拥有和交易的数字资产。本文将介绍几个基于最先进的Web3.0技术实践的NFT游戏项目&#xff0c;并分享一些相关代码。 Axie Infinity&#xff08;亚龙无…

【网络协议】LACP(Link Aggregation Control Protocol,链路聚合控制协议)

文章目录 LACP名词解释LACP工作原理互发LACPDU报文确定主动端确定活动链路链路切换 LACP和PAgP有什么区别&#xff1f;LACP与LAG的关系LACP模式更优于手动模式LACP模式对数据传输更加稳定和可靠LACP模式对聚合链路组的故障检测更加准确和有效 推荐阅读 LACP名词解释 LACP&…