List基本属性和方法移步官方文档:
1.处理最简单的List<String>:
(1)并集、交集、差集
并集:
如果只用List.addAll(Collection<? extends String> c)方法,获得的结果是两个List的元素值和,即会出现相同的元素,如以下代码:
1 public void test(){
2 List<String> list1 = new ArrayList<>();
3 list1.add("北京");
4 list1.add("上海");
5 list1.add("广东");
6 List<String> list2 = new ArrayList<>();
7 list2.add("北京");
8 list2.add("上海");
9 list2.add("山东");
10 list1.addAll(list2);
11 System.out.println("list1.addAll(list2):"+list1);
12 }
13
14 获得的结果为:list1.addAll(list2):[北京, 上海, 广东, 北京, 上海, 山东]
差集:
如果想获得没有重复的集合,需要先了解一下List.removeAll(Collection<?> c),即求差集,如下代码:
1 public void test(){
2 List<String> list1 = new ArrayList<>();
3 list1.add("北京");
4 list1.add("上海");
5 list1.add("广东");
6 List<String> list2 = new ArrayList<>();
7 list2.add("北京");
8 list2.add("上海");
9 list2.add("山东");
10 list1.removeAll(list2);
11 System.out.println("list1.removeAll(list2):"+list1);
12 }
13
14 获得的结果为:list1.removeAll(list2):[广东]
无重复并集:
此时若求无重复并集,可以先做差集,再进行并集,如下代码:
1 public void test(){
2 List<String> list1 = new ArrayList<>();
3 list1.add("北京");
4 list1.add("上海");
5 list1.add("广东");
6 List<String> list2 = new ArrayList<>();
7 list2.add("北京");
8 list2.add("上海");
9 list2.add("山东");
10 list1.removeAll(list2);
11 list1.addAll(list2);
12 System.out.println("list1.removeAll+addAll(list2):"+list1);
13 }
14
15 获得的结果为:list1.removeAll+addAll(list2):[广东, 北京, 上海, 山东]
交集:
交集使用retailAll()即可,如以下代码:
1 public void test(){
2 List<String> list1 = new ArrayList<>();
3 list1.add("北京");
4 list1.add("上海");
5 list1.add("广东");
6 List<String> list2 = new ArrayList<>();
7 list2.add("北京");
8 list2.add("上海");
9 list2.add("山东");
10 list1.retainAll(list2);
11 System.out.println("list1.retainAll(list2):"+list1);
12 }
13
14 获得的结果为:list1.retainAll(list2):[北京, 上海]
(3)有些时候,可能需要将某list查分成指定大小的list,所以简单的实现了一下:
1 public static <T> List<List<T>> splitList(List<T> target, int size) {
2 List<List<T>> listArr = new ArrayList<List<T>>();
3 //获取被拆分的数组个数
4 int arrSize = target.size() % size == 0 ? target.size() / size : target.size() / size + 1;
5 for (int i = 0; i < arrSize; i++) {
6 List<T> sub = new ArrayList<T>();
7 //把指定索引数据放入到list中
8 for (int j = i * size; j <= size * (i + 1) - 1; j++) {
9 if (j <= target.size() - 1) {
10 sub.add(target.get(j));
11 }
12 }
13 listArr.add(sub);
14 }
15 return listArr;
16 }
17
18 @Test
19 public void test(){
20 List<String> list1 = new ArrayList<>();
21 list1.add("北京1");
22 list1.add("北京2");
23 list1.add("北京3");
24 list1.add("北京4");
25 list1.add("北京5");
26 list1.add("北京6");
27 list1.add("北京7");
28 list1.add("北京8");
29 list1.add("北京9");
30 list1.add("北京10");
31 list1.add("北京11");
32
33 System.out.println("list1:"+list1);
34 System.out.println("result:"+splitList(list1,2));
35 }
36
37 结果:
38 list1:[北京1, 北京2, 北京3, 北京4, 北京5, 北京6, 北京7, 北京8, 北京9, 北京10, 北京11]
39 result:[[北京1, 北京2], [北京3, 北京4], [北京5, 北京6], [北京7, 北京8], [北京9, 北京10], [北京11]]
(4)其他常用的简单方法:
1 //List<Object>转List<String>
2 List<Object> objectList = new ArrayList<Object>();
3 List<String> stringList = (List<String>)(List)objectList;
4 //将List<String>转成按某字符拼接成字符串
5 String stringList2String = String.join(",", stringList);
6 //将字符串按照某字符拆分成List<String>
7 List<String> string2StringList = Arrays.asList(stringList2String.split(","));
8
9 //String[]转List<String>
10 List<String> stringList1 = Arrays.asList(new String[]{"str1","str2"});
11 //此时,stringList1不能使用add方法,会报错Exception in thread "main" java.lang.UnsupportedOperationException,要进行以下处理
12 List<String> stringList2 = new ArrayList<>(Arrays.asList(new String[]{"str1","str2"}));