数组转集合

1
2
3
4
5
String[] strArray = new String[]{"aaa","bbb","ccc"};
//注意此时转出来的集合对应不是java.util.ArrayList对象,是Arrays内部的一个ArrayList对象,继承自AbstractList,该父类的add和remove方法会抛出异常
List<String> strArray2List = Arrays.asList(strArray);
//如需转换成java.util.ArrayList对象,可使用构造方法转换
List<String> strArray2List = new ArrayList(Arrays.asList(StrArray));

集合转数组

1
2
3
4
5
List<String> strList = new ArrayList(){{add("aaa");add("bbb");add("ccc")}};
//注意该方法会出现类型转换异常,因为ArrayList的实例对象的toArray方法返回的是一个Object[]数组,强转成String[]会转义失败
String[] strList2Array = (String[]) strList.toArray();
//上面的方法可以使用带有泛型参数的toArray方法,这样返回的结果也是泛型的对象,这样就不会有类型转换的异常了
String[] strList2Array = strList.toArray(new String[strList.size()]);

hashmap集合初始化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
Map<String, String> BX_TEMPLATE_FILE = new HashMap(){
{
put("id","templateId");
put("job_id", "jobId");
put("rule_id", "ruleId");
put("rule_desc", "ruleDesc");
put("data_date", "dateDate");
put("org_no", "orgNo");
put("level", "level1");
put("tab_name1", "tabName1");
put("tab_name2", "tabName2");
put("table_ch_name", "tabChName");
put("pk_name", "pkName");
put("col_name", "colName");
put("上季度问题数据量", "lastQuarterProblemData");
put("上季度数据总量", "lastQuarterData");
put("上季度问题占比", "lastQuarterProblemPercent");
put("本季度问题数据量", "quarterProblemData");
put("本季度数据总量", "quarterData");
put("本季度问题占比", "quarterProblemPercent");
put("本季度问题数据量-上季度问题数据量", "quarterProblemAdd");
put("(本季度问题数据量-上季度问题数据量)/上季度问题数据量", "quarterProblemAddpercent");
put("except_sample", "exceptSample");
put("bank_name", "bankName");
put("机构简称", "bankShortName");
put("importDate", "importDate");
put("reason", "reason");
put("reasonName", "reasonName");
put("reasonTime", "reasonTime");
put("dataStatus", "dataStatus");
put("sqlRecord", "sqlRecord");
}
};
//HASHMAP是hash散列的,如果要线性的,需要用LinkedHashMap:
Map<String, String> BX_TEMPLATE_FILE = new LinkedHashMap(){
{
put("id","templateId");
put("job_id", "jobId");
put("rule_id", "ruleId");
put("rule_desc", "ruleDesc");
put("data_date", "dateDate");
put("org_no", "orgNo");
put("level", "level1");
put("tab_name1", "tabName1");
put("tab_name2", "tabName2");
put("table_ch_name", "tabChName");
put("pk_name", "pkName");
put("col_name", "colName");
put("上季度问题数据量", "lastQuarterProblemData");
put("上季度数据总量", "lastQuarterData");
put("上季度问题占比", "lastQuarterProblemPercent");
put("本季度问题数据量", "quarterProblemData");
put("本季度数据总量", "quarterData");
put("本季度问题占比", "quarterProblemPercent");
put("本季度问题数据量-上季度问题数据量", "quarterProblemAdd");
put("(本季度问题数据量-上季度问题数据量)/上季度问题数据量", "quarterProblemAddpercent");
put("except_sample", "exceptSample");
put("bank_name", "bankName");
put("机构简称", "bankShortName");
put("importDate", "importDate");
put("reason", "reason");
put("reasonName", "reasonName");
put("reasonTime", "reasonTime");
put("dataStatus", "dataStatus");
put("sqlRecord", "sqlRecord");
}
};

集合的深拷贝

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* @description: 深拷贝src集合,集合对象需要实现IEntityClone接口
* @params: [src]
* @return: java.util.Collection<T>
* @date: 2023/2/20
*/
public static <T extends IEntityClone> Collection<T> copyOf(Collection<T> src) throws InstantiationException, IllegalAccessException{
Collection target = src.getClass().newInstance();
src.stream().forEach(t->target.add(t.clone()));
return target;
}

public interface IEntityClone extends Cloneable{

default IEntityClone clone() {
return null;
}
}

使用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package pers.xiaotian.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import pers.xiaotian.utils.IEntityClone;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person implements IEntityClone {
private int age;
private String name;
private Job job;

@Override
public Person clone(){
return new Person(this.age, this.name, job.clone());
}
}

package pers.xiaotian.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import pers.xiaotian.utils.IEntityClone;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Job implements IEntityClone {
private String title;

@Override
public Job clone(){
return new Job(this.title);
}
}

@Test
public void collectionsObjectCopyTest() throws InstantiationException, IllegalAccessException{
// 使用字面量初始化集合对象参数的方式不行!!!
// List<Person> src = new ArrayList(){{
// add(new Person(20, "张三", new Job("老师")));
// add(new Person(21, "李四", new Job("医生")));
// add(new Person(22, "王五", new Job("学生")));
// }};
List<Person> src1 = new ArrayList();
src1.add(new Person(20, "张三", new Job("老师")));
src1.add(new Person(21, "李四", new Job("医生")));
src1.add(new Person(22, "王五", new Job("学生")));
List<Person> dest = (List<Person>) CollectionsUtil.copyOf(src1);
System.out.println(Arrays.toString(dest.toArray()));
dest = new ArrayList<>(dest);
dest.remove(0);
dest.get(0).setAge(25);
dest.get(0).getJob().setTitle("高级医生");
System.out.println(Arrays.toString(dest.toArray()));
System.out.println(Arrays.toString(src1.toArray()));
}

测试结果:

基本类型数组转包装类型集合,已char[]和int[]为例

1
2
3
4
5
6
7
8
9
10
@Test
public void baseTypeArrToList(){
char[] arr = new char[]{'a','b','c'};
List<Character> list = new String(arr).chars().mapToObj(i->(char)i).collect(Collectors.toList());
int[] arr1 = new int[]{1,2,3};
List<Integer> list1 = Arrays.stream(arr1).boxed().collect(Collectors.toList());
System.out.println(Arrays.toString(list.toArray()));
System.out.println(Arrays.toString(list1.toArray()));

}

测试结果:

List set(index, element)和add(index, element)方法的使用说明.

set方法是做修改替换操作,如果当前index还不存在,会提示IndexOutOfBoundsException错误.

add方法是做新增操作,将当前element插入到index的目标位置,之前存在目标位置的index做右移.