List集合的Stream流式操作实现数据类型转换

问题现象:

        最近在项目中,有一些逻辑想用List集合的Stream流式操作来快速实现,但由于之前没做好学习笔记和总结,导致一时间想不起来,只能用本方法来解决,如下:

        可以看出来代码量是比较冗长的,于是就回顾了一下List集合的Stream流式操作的相关知识点;打算打一个代码优化!


 问题分析:

        由上图可以知道,我是想将集合list(List<Map<String, Object>> list )根据元素(Map<String, Object> map)中的key为"infoType"的字段值来作相关的业务逻辑,形成指定的集合(如:List<Map<String, Object>> baseInfoList等),然后再存到map集合(Map<String, Object> exportParams)中去。

        根据这个思路其实就可以使用集合list中的Stream流式操作中的Collectors.groupingBy方法来解决了:
        1、首先对集合list中使用Stream流式操作中的Collectors.groupingBy进行分组(分组依据是元素中的key:"infoType"),形成infoTypeListMap集合(Map<String, List<Map<String, Object>>> infoTypeListMap)。

        2、遍历infoTypeListMap集合,然后将元素存入exportParams集合。


解决方法:

        将上图的代码做如下修改即可:

        exportParams.put(StrUtil.toCamelCase(StaffInfoTypeEnum.BASE_INFO.getCode() + "_LIST"), new ArrayList<>());
	    exportParams.put(StrUtil.toCamelCase(StaffInfoTypeEnum.EDUCATION_INFO.getCode() + "_LIST"), new ArrayList<>());
	    exportParams.put(StrUtil.toCamelCase(StaffInfoTypeEnum.TRAIN_INFO.getCode() + "_LIST"), new ArrayList<>());
	    exportParams.put(StrUtil.toCamelCase(StaffInfoTypeEnum.WORK_EXPERIENCE_INFO.getCode() + "_LIST"), new ArrayList<>());
	    exportParams.put(StrUtil.toCamelCase(StaffInfoTypeEnum.SALARY_INFO.getCode() + "_LIST"), new ArrayList<>());
	    exportParams.put(StrUtil.toCamelCase(StaffInfoTypeEnum.FAMILY_CONTACT_INFO.getCode() + "_LIST"), new ArrayList<>());
	    exportParams.put(StrUtil.toCamelCase(StaffInfoTypeEnum.LANGUAGE_INFO.getCode() + "_LIST"), new ArrayList<>());
	    Map<String, List<Map<String, Object>>> infoTypeListMap = list.stream().collect(Collectors.groupingBy(map -> (String)map.get("infoType")));
	    infoTypeListMap.entrySet().stream().forEach(entry->{
		    String key = entry.getKey();
		    List<Map<String, Object>> mapList = entry.getValue();
		    exportParams.put(StrUtil.toCamelCase(key+"_LIST"), mapList);
	    });

拓展:

        文末有我写的测试代码,有助于理解,可直接搬运使用!

        相信小伙伴们都见识到List集合的Stream流式操作的强大了吧,接下来,我就把List集合的Stream流式操作实现数据类型转换的常用方法记录并分享在此,以供自己和大家学习记忆。

        1、Collectors.toList()

list.stream().collect(Collectors.toList());

        作用:可用于克隆/拷贝原list集合。作用相当于以下代码:

new ArrayList<>(list);

        2、Collectors.toCollection(ArrayList::new)

list.stream().collect(Collectors.toCollection(ArrayList::new));

        作用:List<Object> 转为 ArrayList<Object> 。作用相当于以下代码:

new ArrayList<>(list);

        3、Collectors.toCollection(LinkedList::new)

list.stream().collect(Collectors.toCollection(LinkedList::new));

        作用:List<Object> 转为 LinkedList<Object> 。作用相当于以下代码:

new LinkedList<>(list);

        4、Collectors.toCollection(LinkedHashSet::new)

list.stream().collect(Collectors.toCollection(LinkedHashSet::new));

        作用:List<Object> 转为 LinkedHashSet<Object>。作用相当于以下代码:

new LinkedHashSet<>(list);

        5、Collectors.toCollection(HashSet::new)

list.stream().collect(Collectors.toCollection(HashSet::new));

        作用:List<Object> 转为 HashSet<Object> 。作用相当于以下代码:

new HashSet<>(list);

        6、Collectors.toCollection(TreeSet::new)

list.stream().collect(Collectors.toCollection(TreeSet::new));

        作用:List<Object> 转为 TreeSet<Object>。

        7、Collectors.partitioningBy

list.stream().collect(Collectors.partitioningBy(s -> s.length() > 2));

        作用:List<Object> 转为 Map<Boolean, List<Object>>。

        8、【重点】Collectors.groupingBy

list.stream().collect(Collectors.groupingBy(s -> s));

        作用:List<Object> 转为 Map<Object, List<Object>>。

        9、Collectors.collectingAndThen

list.stream().collect(Collectors.groupingBy(s -> s));

        作用:根据指定条件,将集合中所有元素形成的指定类型的结果集合后,再将结果集合做指定的结果集。如:List<Object> 转为 Map<Object, List<Object>> 再转为 Set<String>返回,如下:

list.stream().collect(Collectors.collectingAndThen(Collectors.groupingBy(s -> s), Map::keySet));

        10、map

list.stream().collect(Collectors.groupingBy(s -> s));

        作用:根据指定条件,提取集合中所有元素的指定属性/字段,形成新的类型(指定属性/字段的数据类型)集合。如:List<Object> 转为 List<Integer>

list.stream().map(String::length).collect(Collectors.toList());

        11、【重点】Collectors.toMap

        作用:List<Object> 转为 Map<Object, Object>

        具有3个重载方法

        11.1、Collectors.toMap(key, value)

list.stream().collect(Collectors.toMap(str -> str, String::length));

        作用:根据指定条件,提取集合中所有元素的指定属性/字段,形成新的类型(指定属性/字段的数据类型)集合。

        参数说明:

                key:指定元素对象的某个属性作为map结果集合的key值。

                value:指定元素对象的某个属性作为map结果集合的value值。

        缺点:当元素中存在重复的key时,会有如下报错:Duplicate key XX。

        11.2、【重点】Collectors.toMap(key, value, distinctStrategy)

list.stream().collect(Collectors.toMap(String::length, str -> str, (length, str) -> str));

        作用:在11.1功能一致,多了一个第三参数,该参数用于配置当出现重复key时,对这些元素的value的操作处理逻辑,可以避免key重复报错问题。

        参数说明:

                distinctStrategy:去重逻辑,当遇到重复key时触发该逻辑。

        11.3、【重点】Collectors.toMap(key, value, distinctStrategy, returnTypeSupplier)

list.stream().collect(Collectors.toMap(String::length, str -> str, (length, str) -> str, TreeMap::new));

        参数说明:

         returnTypeSupplier:指定map结果集合的数据类型,通过查询源代码可知:当未指定该参数时,默认返回的是HashMap数据类型;如下:


测试代码:

       1、StreamStringListTransformTest 测试类:

        测试List<String>集合的Stream流式操作,实现数据类型转换的功能:

import java.util.*;
import java.util.stream.Collectors;


/**
 * Stream流的各种数据类型转换操作
 */
public class StreamStringListTransformTest {
	public static void main(String[] args) {
		//List<String>集合原数据
		List<String> list = Arrays.asList("java", "python", "C#","php");

		//1、Collectors.toList()
		// List<String>克隆(代替流)
		List<String> listResult = list.stream().collect(Collectors.toList());
		listResult.forEach(System.out::println);
		System.out.println("--------------");




		//2、Collectors.toCollection(ArrayList::new)
		// List<String> 转为 ArrayList<String>
		ArrayList<String> arrayList = list.stream().collect(Collectors.toCollection(ArrayList::new));
		arrayList.forEach(System.out::println);
		System.out.println("--------------");




		//3、Collectors.toCollection(LinkedList::new)
		// List<String> 转为 LinkedList<String>
		List<String> linkedList = list.stream().collect(Collectors.toCollection(LinkedList::new));
		linkedList.forEach(System.out::println);
		System.out.println("--------------");




		//4、Collectors.toCollection(LinkedHashSet::new)
		// List<String> 转为 LinkedHashSet<String>
		LinkedHashSet<String> linkedHashSet = list.stream().collect(Collectors.toCollection(LinkedHashSet::new));
		linkedHashSet.forEach(System.out::println);//LinkedHashSet是有序的
		System.out.println("--------------");




		//5、Collectors.toCollection(HashSet::new)
		// List<String> 转为 HashSet<String>
		HashSet<String> hashSet = list.stream().collect(Collectors.toCollection(HashSet::new));
		hashSet.forEach(System.out::println);//HashSet是无序的(按hash逻辑自动排序)
		System.out.println("--------------");




		//6、Collectors.toCollection(TreeSet::new)
		// List<String> 转为 TreeSet<String>
		TreeSet<String> treeSet = list.stream().collect(Collectors.toCollection(TreeSet::new));
		treeSet.forEach(System.out::println);//TreeSet是按自然顺序自动排序
		System.out.println("--------------");




		//7、Collectors.partitioningBy:根据指定条件,将集合中所有元素分成key为true或false的两组集合,形成的map集合
		// List<String> 转为 Map<Boolean, List<String>>
		Map<Boolean, List<String>> partitioningByMap = list.stream().collect(Collectors.partitioningBy(s -> s.length() > 2));
		System.out.println(partitioningByMap.toString());
		System.out.println("--------------");




		//8、Collectors.groupingBy:根据指定条件,将集合中所有元素分成key为元素本身的集合,形成的map集合
		//List<String> 转为 Map<String, List<String>>
		Map<String, List<String>> groupingByMap = list.stream().collect(Collectors.groupingBy(s -> s));
		System.out.println(groupingByMap.toString());
		System.out.println("--------------");




		//9、Collectors.collectingAndThen:根据指定条件,将集合中所有元素形成的指定类型的结果集合后,再将结果集合做指定的结果集
		//List<String> 转为 Map<String, List<String>> 再转为 Set<String>
		Set<String> collectingAndThen = list.stream().collect(Collectors.collectingAndThen(Collectors.groupingBy(s -> s), Map::keySet));
		System.out.println(collectingAndThen.toString());
		System.out.println("--------------");




		//10、map:根据指定条件,提取集合中所有元素的指定属性,形成新的指定集合
		//List<String> 转为 List<Integer>
		List<Integer> lengthList = list.stream().map(String::length).collect(Collectors.toList());
		System.out.println(lengthList.toString());
		System.out.println("--------------");




		//11、Collectors.toMap:根据指定条件,提取集合中所有元素的指定属性,组合成自定义类型的map结果集合
		//List<String> 转为 Map<Integer, String>
		//List<String> 转为 Map<String, Integer>
		//注意:该函数有3个重载方法:
		//      11.1、2个参数(key,value):
		//          第一个参数(元素对象的某个指定属性)作为key。
		//          第二个参数作为value。(缺点:当存在key重复的不同元素时,会有类似以下报错:Duplicate key 王五)
		//      11.2、3个参数(key,value,distinctStrategy):
		//          第一个参数(元素对象的某个指定属性)作为key;
		//          第二个参数作为value;
		//          第三个参数用于配置当出现重复key时,对这些元素的value的操作处理逻辑,可以避免上面的key重复报错问题。
		//      11.2、3个参数(key,value,distinctStrategy,returnTypeSupplier):
		//          第一个参数(元素对象的某个指定属性)作为key;
		//          第二个参数作为value;
		//          第三个参数用于配置当出现重复key时,对这些元素的value的操作处理逻辑,可以避免上面的key重复报错问题。
		//          第四个参数用于设置返回map的数据类型(如:TreeMap、ConcurrentHashMap等),默认是返回HashMap。
		List<String> strList = Arrays.asList("java", "python", "C#","php", "java");
		//List<String> 转为 Map<Integer, String>
//		Map<Integer, String> strList1 = strList.stream().collect(Collectors.toMap(String::length, str -> str));//报错:Duplicate key java
//		System.out.println(strList1.toString());
//		System.out.println("--------------");
		//List<String> 转为 Map<String, Integer>
//		Map<String, Integer> strList2 = strList.stream().collect(Collectors.toMap(str -> str, String::length));//报错:Duplicate key 4
//		System.out.println(strList2.toString());
//		System.out.println("--------------");
		//List<String> 转为 Map<String, Integer>
		Map<String, Integer> strList3 = strList.stream().collect(Collectors.toMap(str -> str, String::length, (first, second) -> second));
		System.out.println(strList3.toString());
		System.out.println("--------------");
		Map<String, Integer> list1 = list.stream().collect(Collectors.toMap(str -> str, String::length));
		System.out.println(list1.toString());
		System.out.println("--------------");
		//List<String> 转为 Map<String, Integer>
		Map<Integer, String> list2 = list.stream().collect(Collectors.toMap(String::length, str -> str));
		System.out.println(list2.toString());
		System.out.println("--------------");
		//List<String> 转为 Map<String, Integer>
		Map<Integer, String> list3 = list.stream().collect(Collectors.toMap(String::length, str -> str, (length, str) -> str));
		System.out.println(list3.toString());
		System.out.println("--------------");
		//List<String> 转为 TreeMap<String, Integer>
		TreeMap<Integer, String> list4 = list.stream().collect(Collectors.toMap(String::length, str -> str, (length, str) -> str, TreeMap::new));
		System.out.println(list4.toString());
		System.out.println("--------------");
	}
}

        2、Person实体类:

        用于支持的测试:

public class Person {
	private String name;
	private Integer age;

	public Person() {
	}

	public Person(String name, Integer age) {
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';
	}
}

3、StreamObjectListTransformTest 测试类:

        测试List<Object>集合的Stream流式操作,实现数据类型转换的功能:

import xxx.Person;//注意:修改为引用的Person实体类的文件路径

import java.util.*;
import java.util.stream.Collectors;


/**
 * Stream流的各种数据类型转换操作
 */
public class StreamObjectListTransformTest {
	public static void main(String[] args) {
		//List<Object>集合原数据
		List<Person> list = new ArrayList<>();
		list.add(new Person("老六", 20));
		list.add(new Person("王五", 20));
		list.add(new Person("李四", 19));
		list.add(new Person("张三", 18));
		list.add(new Person("钱二", 17));
		list.add(new Person("赵一", 16));


		//1、Collectors.toList()
		// List<Object>克隆(代替流)
		List<Person> listResult = list.stream().collect(Collectors.toList());
		listResult.forEach(System.out::println);
		System.out.println("--------------");




		//2、Collectors.toCollection(ArrayList::new)
		// List<Object> 转为 ArrayList<Object>
		ArrayList<Person> arrayList = list.stream().collect(Collectors.toCollection(ArrayList::new));
		arrayList.forEach(System.out::println);
		System.out.println("--------------");




		//3、Collectors.toCollection(LinkedList::new)
		// List<Object> 转为 LinkedList<Object>
		List<Person> linkedList = list.stream().collect(Collectors.toCollection(LinkedList::new));
		linkedList.forEach(System.out::println);
		System.out.println("--------------");




		//4、Collectors.toCollection(LinkedHashSet::new)
		// List<Object> 转为 LinkedHashSet<Object>
		LinkedHashSet<Person> linkedHashSet = list.stream().collect(Collectors.toCollection(LinkedHashSet::new));
		linkedHashSet.forEach(System.out::println);//LinkedHashSet是有序的
		System.out.println("--------------");




		//5、Collectors.toCollection(HashSet::new)
		// List<Object> 转为 HashSet<Object>
		HashSet<Person> hashSet = list.stream().collect(Collectors.toCollection(HashSet::new));
		hashSet.forEach(System.out::println);//HashSet是无序的(按hash逻辑自动排序)
		System.out.println("--------------");




//		//6、Collectors.toCollection(TreeSet::new)
//		// List<Object> 转为 TreeSet<Object>
//		TreeSet<Person> treeSet = list.stream().collect(Collectors.toCollection(TreeSet::new));
//		treeSet.forEach(System.out::println);
//TreeSet是按单一元素自然顺序自动排序,所以转换时会有类似以下报错:
//  com.stephen.javademo.stream.bo.Person cannot be cast to java.lang.Comparable
//		System.out.println("--------------");




		//7、Collectors.partitioningBy:根据指定条件,将集合中所有元素分成key为true或false的两组集合,形成的map集合
		// List<Object> 转为 Map<Boolean, List<Object>>
		Map<Boolean, List<Person>> partitioningByMap = list.stream().collect(Collectors.partitioningBy(person -> person.getAge() >= 18));
		System.out.println(partitioningByMap.toString());
		System.out.println("--------------");




		//8、Collectors.groupingBy:根据指定条件,将集合中所有元素分成key为元素本身的集合,形成的map集合
		//List<Object> 转为 Map<String, List<Object>>
		Map<String, List<Person>> groupingByMap = list.stream().collect(Collectors.groupingBy(Person::getName));
		System.out.println(groupingByMap.toString());
		System.out.println("--------------");




		//9、Collectors.collectingAndThen:根据指定条件,将集合中所有元素形成的指定类型的结果集合后,再将结果集合做指定的结果集
		//List<Object> 转为 Map<String, List<Object>> 再转为 Set<String>
		Collection<List<Person>> collectingAndThen = list.stream().collect(Collectors.collectingAndThen(Collectors.groupingBy(Person::getName), Map::values));
		System.out.println(collectingAndThen.toString());
		System.out.println("--------------");




		//10、map:根据指定条件,提取集合中所有元素的指定属性,形成新的指定集合
		//List<Object> 转为 List<String>
		List<String> nameList = list.stream().map(Person::getName).collect(Collectors.toList());
		System.out.println(nameList.toString());
		System.out.println("--------------");
		//List<Object> 转为 List<Integer>
		List<Integer> ageList = list.stream().map(Person::getAge).collect(Collectors.toList());
		System.out.println(ageList.toString());
		System.out.println("--------------");
		//List<Object> 转为 Set<Integer>
		Set<Integer> ageSet = list.stream().map(Person::getAge).collect(Collectors.toSet());
		System.out.println(ageSet.toString());
		System.out.println("--------------");




		//11、Collectors.toMap:根据指定条件,提取集合中所有元素的指定属性,组合成自定义类型的map结果集合
		//List<Object> 转为 Map<Object, Object>
		//注意:该函数有3个重载方法:
		//      11.1、2个参数(key,value):
		//          第一个参数(元素对象的某个指定属性)作为key。
		//          第二个参数作为value。(缺点:当存在key重复的不同元素时,会有类似以下报错:Duplicate key 王五)
		//      11.2、3个参数(key,value,distinctStrategy):
		//          第一个参数(元素对象的某个指定属性)作为key;
		//          第二个参数作为value;
		//          第三个参数用于配置当出现重复key时,对这些元素的value的操作处理逻辑,可以避免上面的key重复报错问题。
		//      11.2、3个参数(key,value,distinctStrategy,returnTypeSupplier):
		//          第一个参数(元素对象的某个指定属性)作为key;
		//          第二个参数作为value;
		//          第三个参数用于配置当出现重复key时,对这些元素的value的操作处理逻辑,可以避免上面的key重复报错问题。
		//          第四个参数用于设置返回map的数据类型(如:TreeMap、ConcurrentHashMap等),默认是返回HashMap。
		//List<Person> 转为 Map<Integer, String>
//		Map<Integer, String> personMap1 = list.stream().collect(Collectors.toMap(Person::getAge, Person::getName));//报错:Duplicate key 王五
//		System.out.println(personMap1.toString());
//		System.out.println("--------------");
		//List<Person> 转为 Map<String, Integer>
		Map<String, Integer> personMap2 = list.stream().collect(Collectors.toMap(Person::getName, Person::getAge));
		System.out.println(personMap2.toString());
		System.out.println("--------------");
		//List<Person> 转为 Map<String, Person>
		Map<String, Person> personMap3 = list.stream().collect(Collectors.toMap(Person::getName, person -> person));
		System.out.println(personMap3.toString());
		System.out.println("--------------");

		//List<Person> 转为 Map<Integer, String>
		Map<Integer, String> personMap4 = list.stream().collect(Collectors.toMap(Person::getAge, Person::getName, (preValue, nextValue) -> nextValue));//(preValue, nextValue) -> nextValue):key重复时,取后者
		System.out.println(personMap4.toString());
		System.out.println("--------------");
		//List<Person> 转为 Map<Integer, String>
		Map<Integer, String> personMap5 = list.stream().collect(Collectors.toMap(Person::getAge, Person::getName, (preValue, nextValue) -> preValue));//(preValue, nextValue) -> preValue):key重复时,取前者
		System.out.println(personMap5.toString());
		System.out.println("--------------");
		//List<Person> 转为 Map<Integer, String>
		Map<Integer, String> personMap6 = list.stream().collect(Collectors.toMap(Person::getAge, Person::getName, (preValue, nextValue) -> preValue+"、"+nextValue));//(preValue, nextValue) -> preValue+"、"+nextValue):key重复时,取两者拼接
		System.out.println(personMap6.toString());
		System.out.println("--------------");
		//List<Person> 转为 TreeMap<Integer, String>
		TreeMap<Integer, String> personMap7 = list.stream().collect(Collectors.toMap(Person::getAge, Person::getName, (preValue, nextValue) -> preValue + "、" + nextValue, TreeMap::new));//(preValue, nextValue) -> preValue+"、"+nextValue):key重复时,取两者拼接
		System.out.println(personMap7.toString());
		System.out.println("--------------");
	}
}

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

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

相关文章

day57 集合 List Set Map

List实现类 List接口特点&#xff1a;元素有序 可重复 Arraylist 可变数组 jdk 8 以前Arraylist容量初始值10 jdk8 之后初始值为0&#xff0c;添加数据时&#xff0c;容量为10&#xff1b; ArrayList与Vector的区别&#xff1f; LinkList&#xff1a;双向链表 优点&#xff1…

服务器权限:Error: EACCES: permission denied, open‘/Cardiac/uniquC.csv

背景&#xff1a; 我想在服务器上传一个文件uniquC.csv&#xff0c;但是服务器说我没有权限 解决方案&#xff1a; 1. 查看目前是否存在对文件夹的权限 ls -ld /Cardiac/ # your fold path 此时&#xff0c;我发现 这也意味着root也没有赋予写的权限。 2. 拿到root权限 …

软件设计师软考题目解析10 --每日五题

想说的话&#xff1a;要准备软考了。0.0&#xff0c;其实我是不想考的&#xff0c;但是吧&#xff0c;由于本人已经学完所有知识了&#xff0c;只是被学校的课程给锁在那里了&#xff0c;不然早找工作去了。寻思着反正也无聊&#xff0c;就考个证玩玩。 本人github地址&#xf…

C++基于多设计模式下的同步异步日志系统day1

C基于多设计模式下的同步&异步日志系统day1 &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C基于多设计模式下的同步&异步日志系统 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&am…

死记硬背spring bean 的生命周期

1.bean的生命周期 我们平常经常使用类似于new Object()的方式去创建对象&#xff0c;在这个对象没有任何引用的时候&#xff0c;会被gc给回收掉。而对于spring而言&#xff0c;它本身存在一个Ioc容器&#xff0c;就是用来管理对象的&#xff0c;而对象的生命周期也完全由这个容…

67-箭头函数,new.target,模版字符串

1.箭头函数 ES6新增语法&#xff0c;用来简化函数的书写()>{} <script>//箭头函数的基本使用let a (a,b)>{return ab;}let c a(1,2);console.log(c);//输出3</script> 2.简写形式&#xff1a; 2.1参数&#xff1a;只有一个参数时可以省略小括号a>{}&…

Java Stream 流?看这一篇就够了!

大家好&#xff0c;从我开始写博客也过去半年多了&#xff0c;c 站陪我走过了学习 Java 最艰苦的那段时光&#xff0c;也非常荣幸写的博客能得到这么多人的喜欢。 某一天当我开始学习分布式的时候突然想到这可能是补充 Java 知识拼图的最后几块部分了&#xff0c;为了将前面的知…

《springcloud alibaba》 三 sentinel流量控制

目录 sentinel准备流控规则 qpspom.xmlapllication.yml启动类controller查看结果流控提示不太友好 流控规则 线程数全局异常处理pom.xmlapplication.yml启动类实体类controller类异常类测试 关联流控模式关联jmeter 链路servicecontroller代码调整 流控效果Warm UP 熔断降级规则…

idea项目中文乱码

背景&#xff1a; 从gitee下download了项目发现配置值文件application.properies中出现了乱码&#xff0c;如下 其他文件都正常&#xff0c;例如 解决&#xff1a; 不要 忘记 ok 解决后配置文件 application.properties

2.1 表结构数据

1、表结构数据 字段&#xff1a;整列数 记录&#xff1a;整行数 维度&#xff1a;业务角度 度量&#xff1a;业务行为结果 维度字段&#xff1a;文本型&#xff08;状态&#xff09; 度量字段&#xff1a;数值型&#xff08;交易结果&#xff09; 2、事实表&维度表 维度表…

ubuntu22.04安裝mysql8.0

官网下载mysql&#xff1a;MySQL :: Download MySQL Community Server 将mysql-server_8.0.20-2ubuntu20.04_amd64.deb-bundle.tar上传到/usr/local/src #解压压缩文件 tar -xvf mysql-server_8.0.20-2ubuntu20.04_amd64.deb-bundle.tar解压依赖包依次输入命令 sudo dpkg -i m…

基于springboot+vue的纺织品企业财务管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

顶刊 Radiology2023 Top10文章排行榜发布:ChatGPT霸占5席!医学前沿必读

顶刊 Radiology2023 Top10文章排行榜发布&#xff1a;ChatGPT霸占5席&#xff01;医学前沿必读 期刊基本信息 期刊名称&#xff1a;RADIOLOGY 期刊ISSN: 0033-8419 影响因子/SCI分区&#xff1a;19.7/1区 出版周期&#xff1a;Monthly Radiology 是医学放射学领域的顶级期刊&am…

【算法】最小生成树—Prim算法与Kruskal算法

Prim算法和Kruskal算法都是解决最小生成树问题的经典算法。最小生成树是原图的最小连通子图&#xff0c;它包含原图的全部结点&#xff0c;且保持图连通的所有边代价和最小。一个连通图可能有多个最小生成树。 一、Prim算法 含义 Prim算法&#xff0c;也被称为普里姆算法&…

Unity(第十七部)Unity自带的角色控制器

组件Character Controller 中文角色控制器 using System.Collections; using System.Collections.Generic; using UnityEngine;public class player : MonoBehaviour {private CharacterController player;void Start(){player GetComponent<CharacterController>();}v…

Win11系统实现adb命令向安卓子系统安装APP

Win11系统实现通过adb命令向安卓子系统安装已下载好的apk包。 要实现以上目标&#xff0c;我们需要用到一个Android SDK 的组件Android SDK Platform-Tools &#xff01;这个组件呢其实是被包含在 Android Studio中的&#xff0c;如果你对安卓开发有所了解对此应该不会陌生&…

jmeter如何请求访问https接口

添加线程组http请求 新建线程组&#xff0c;添加http请求 填入协议&#xff0c;ip&#xff0c;端口&#xff0c;请求类型&#xff0c;路径&#xff0c;以及请求参数&#xff0c;查看结果树等。 然后最关键的一步来了。 导入证书 步骤&#xff1a;获取证书&#xff0c;重新生…

Linux磁盘性能方法以及磁盘io性能分析

Linux磁盘性能方法以及磁盘io性能分析 1. fio压测1.1. 安装fio1.2. bs 4k iodepth 1&#xff1a;随机读/写测试&#xff0c;能反映硬盘的时延性能1.3. bs 128k iodepth 32&#xff1a;顺序读/写测试&#xff0c;能反映硬盘的吞吐性能 2. dd压测2.1. 测试纯写入性能2.2. 测试…

【深度学习】Pytorch 教程(十五):PyTorch数据结构:7、模块(Module)详解(自定义神经网络模型并训练、评估)

文章目录 一、前言二、实验环境三、PyTorch数据结构1、Tensor&#xff08;张量&#xff09;1. 维度&#xff08;Dimensions&#xff09;2. 数据类型&#xff08;Data Types&#xff09;3. GPU加速&#xff08;GPU Acceleration&#xff09; 2、张量的数学运算1. 向量运算2. 矩阵…

《2023跨境电商投诉大数据报告》发布|亚马逊 天猫国际 考拉海购 敦煌网 阿里巴巴

2023年&#xff0c;跨境电商API接口天猫国际、京东国际和抖音全球购以其强大的品牌影响力和市场占有率&#xff0c;稳坐行业前三的位置。同时&#xff0c;各大跨境电商平台消费纠纷问题层出不穷。依据国内知名网络消费纠纷调解平台“电诉宝”&#xff08;315.100EC.CN&#xff…