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 - JDK10
        Map<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 666
        list.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>() {
            @Override
            public 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的 所以这里不能写this
        list.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>() {
            @Override
            public String apply(String s) {

                return s.toUpperCase();
            }
        }).forEach(s-> System.out.println(s));
        
        //方法引用
        list.stream().map(String::toUpperCase).forEach(s-> System.out.println(s));
    }
}

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[Linux] nginx防盗链与优化

一、Nginx的页面优化 1.1 Nginx的网页压缩 在Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能。进行相关的配置修改&#xff0c;就能实现Nginx页面的压缩&#xff0c;达到节约带宽&#xff0c;提升用户访问速度 vim /usr/local/nginx/conf/nginx.conf http { .…

Shell三剑客:正则表达式简介

前言 一、名称解释 正则表达式&#xff08;regular expression&#xff0c;RE&#xff09;是一种字符模式&#xff0c;用于在查找过程中匹配指定的字符。在大多数程序里&#xff0c;正则表达式都被置于两个正斜杠之间&#xff1b;例如/l[oO]ve/就是由正斜杠界定的正则表达式&am…

python基于ModBusTCP服务端的业务实现特定的client

python实现ModBusTCP协议的client是一件简单的事情&#xff0c;只要通过pymodbus、pyModbusTCP等模块都可以实现&#xff0c;本文采用pymodbus。但要基于ModBusTCP服务端的业务实现特定的client&#xff0c;那得看看服务端是否复杂。前面系列文章&#xff0c;我们学习了对服务端…

无需公网IP联机Minecraft,我的世界服务器本地搭建教程

目录 前言 1.Mcsmanager安装 2.创建Minecraft服务器 3.本地测试联机 4. 内网穿透 4.1 安装cpolar内网穿透 4.2 创建隧道映射内网端口 5.远程联机测试 6. 配置固定远程联机端口地址 6.1 保留一个固定TCP地址 6.2 配置固定TCP地址 7. 使用固定公网地址远程联机 8.总…

开关量防抖滤波器(梯形图和SCL源代码)

模拟量防抖超限报警功能块请查看下面文章链接: https://rxxw-control.blog.csdn.net/article/details/133969425https://rxxw-control.blog.csdn.net/article/details/133969425 1、开关量防抖滤波器 2、防抖滤波 3、梯形图代码

【conda】利用Conda创建虚拟环境,Pytorch各版本安装教程(Ubuntu)

TOC conda 系列&#xff1a; 1. conda指令教程 2. 利用Conda创建虚拟环境&#xff0c;安装Pytorch各版本教程(Ubuntu) 1. 利用Conda创建虚拟环境 nolonolo:~/sun/SplaTAM$ conda create -n splatam python3.10查看结果&#xff1a; (splatam) nolonolo:~/sun/SplaTAM$ cond…

手把手教你玩转ESP8266(原理+驱动)

在嵌入式开发中&#xff0c;无线通信的方式有很多&#xff0c;其中 WIFI 是绕不开的话题。说到 WIFI 通信&#xff0c;就不得不提 ESP8266了。 ESP8266 是一款高性能的 WIFI 串口模块&#xff0c;实现透明传输。只要有一定的串口知识&#xff0c;不需要知道 WIFI 原理就可以上…

【Qt开发流程】之UI风格、预览及QPalette使用

概述 一个优秀的应用程序不仅要有实用的功能&#xff0c;还要有一个漂亮美腻的外观&#xff0c;这样才能使应用程序更加友善、操作性良好&#xff0c;更加符合人体工程学。作为一个跨平台的UI开发框架&#xff0c;Qt提供了强大而且灵活的界面外观设计机制&#xff0c;能够帮助…

如何快速访问未知世界【献给我的一位尚未谋面的“故友”】

1.下载Chrome浏览器 想要访问未知世界&#xff0c;强烈推荐Chrome&#xff0c;好用无广告&#xff0c;点击链接即可下载&#xff1a; 点我访问下载页面 2.安装插件 下一步&#xff0c;我们需要安装一个插件&#xff0c;这个插件能为Chrome浏览器插上腾飞的翅膀 [doge] (可以…

FTR223限时回归?经典三花再加金翅膀,CL500特别款亮相

FTR223可以说是非常经典的一款本田小攀爬车型了&#xff0c;之前我还有幸玩过一段时间&#xff0c;最近本田在泰国车展上展出了CL500的特别版&#xff0c;其中FTR223纪念版的版画让人眼前一亮&#xff0c;经典的白、红、蓝三色搭配让人眼前一亮。 CL500这台车在国内今年刚上市&…

18.Java程序设计-基于Springboot的电影院售票系统的设计与实现

摘要 电影产业在当今社会中占据着重要地位&#xff0c;电影院作为观影的主要场所&#xff0c;其售票系统的高效性和用户体验至关重要。本文基于Spring Boot框架设计并实现了一款电影院售票系统&#xff0c;旨在提高售票效率、优化用户体验&#xff0c;并解决传统售票方式存在的…

Panalog 日志审计系统 sprog_deletevent.php SQL 注入漏洞复现

0x01 产品简介 Panalog大数据日志审计系统定位于将大数据产品应用于高校、 公安、 政企、 医疗、 金融、 能源等行业之中&#xff0c;针对网络流量的信息进行日志留存&#xff0c;可对用户上网行为进行审计&#xff0c;逐渐形成大数据采集、 大数据分析、 大数据整合的工作模式…

Rocket MQ 架构介绍

文章目录 为什么选择Rocket MQ基本概念优点缺点架构图编程模型发送者发送消息固定步骤消费者消费消息固定步骤 为什么选择Rocket MQ Rocket MQ是阿帕奇顶级的开源项目&#xff0c;由阿里开发并开源。它的研发背景是Active MQ与Kafka不能很好的解决当时的业务场景。官网上是这么…

游戏中小地图的制作__unity基础开发教程

小地图的制作 Icon标识制作制作摄像机映射创建地图UI效果“不一样的效果” 在游戏中经常可以看到地图视角的存在&#xff0c;那么地图视角是如何让实现的呢&#xff1f; 这一期教大家制作一个简易的小地图。 &#x1f496;点关注&#xff0c;不迷路。 老样子&#xff0c;我们还…

c语言为什么要引入变量

大家好&#xff0c;今天给大家介绍c语言为什么要引入变量&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 C语言引入变量的原因主要是为了存储数据并且方便后续的操作和计算。 变…

机器学习基础介绍

百度百科&#xff1a; 机器学习是一门多领域交叉学科&#xff0c;涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为&#xff0c;以获取新的知识或技能&#xff0c;重新组织已有的知识结构使之不断改善自身的性能。 …

BluetoothDevice 序列化问题

文章目录 前言思考分析定位 前言 在做蓝牙设备通信时&#xff0c;遇到一个奇葩的问题&#xff0c;公司另一个部门开发的蓝牙组件库&#xff0c;把蓝牙设备BluetoothDevice进行了序列化&#xff0c;在连接时候又进行反序列化。但是当我去调试我的项目时&#xff0c;发现发序列化…

网贷教父判无期,千家万户哭成狗

作者&#xff5c;翻篇 新熔财经快评&#xff1a; 真是太气人了 e租宝崩盘后 比它更大的雷又来了 “网贷教父”周世平 非法吸收公众存款1090亿 被判了无期 48万多人的血汗钱啊 就这样血本无归了 要知道 当年周世平做p2p 就靠着全额垫付 这颗定心丸 大量的宝妈 上…

[陇剑杯 2021]日志分析

[陇剑杯 2021]日志分析 题目做法及思路解析&#xff08;个人分享&#xff09; 问一&#xff1a;单位某应用程序被攻击&#xff0c;请分析日志&#xff0c;进行作答&#xff1a; 网络存在源码泄漏&#xff0c;源码文件名是_____________。(请提交带有文件后缀的文件名&…

日志门面slf4j和各日志框架

简介 简单日志门面(Simple Logging Facade For Java) SLF4J主要是为了给Java日志访问提供一套标准、规范的API框架&#xff0c; 其主要意义在于提供接口&#xff0c;具体的实现可以交由其他日志框架&#xff0c;如log4j、logback、log4j2。 对于一般的Java项目而言&#xff…