public class ListUtil {
/**
* 合并多个list
* @param lists
* @param <T>
* @return
*/
public static <T> List<T> mergeLists(List<T>... lists) {
Class clazz = lists[0].getClass();
List<T> list = null;
try {
list = (List<T>) clazz.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
for (int i = 0, len = lists.length; i < len; i++) {
list.addAll(lists[i]);
}
return list;
}
}
测试方法:
public class ListUtilTest {
/**
* 测试合并多个list
*/
@Test
public void testMergeLists() {
List<String> list1 = new ArrayList<String>();
list1.add("张三");
list1.add("李四");
list1.add("王五");
List<String> list2 = new ArrayList<String>();
list2.add("老张");
list2.add("老李");
list2.add("老王");
/*List<String> list = new ArrayList<String>();
list.addAll(list1);
list.addAll(list2);*/
List<String> list = ListUtil.mergeLists(new List[]{list1, list2});
System.out.println(list);
}
}
2018-12-20更新:
非常感谢“小风果果”提出的问题。当时为了实现功能,没有考虑太多。
去重分为基本类型和自定义对象类型(另外定义的pojo),对基本类型可以写一个工具类,现在已经加了一个能去重的方法;如果是自定义对象类型,需要给相应的对象重写equals方法,因为不同的对象比较规则不一样,contains依赖于equals方法,这种情况没法写通用的。
带去重选项的合并多个List的方法
public class ListUtil {
/**
* 带有“是否需要去重”选项的合并list方法
* @param removeDuplicate 是否需要去重(true/false)
* @param lists 需要合并的list
* @param <T>
* @return
*/
public static <T> List<T> mergeListsTwo(boolean removeDuplicate, List<T>... lists) {
Class clazz = lists[0].getClass();
List<T> list = null;
try {
list = (List<T>) clazz.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
if (removeDuplicate) { // 移除重复数据
for (int i = 0, len = lists.length; i < len; i++) {
Iterator it = lists[i].iterator(); // 迭代器
while (it.hasNext()) {
T obj = (T) it.next();
if (!list.contains(obj)) {
list.add(obj);
}
}
}
} else { // 不移除重复数据
for (int i = 0, len = lists.length; i < len; i++) {
list.addAll(lists[i]);
}
}
return list;
}
/**
* 合并list,默认不去除重复
* @param lists
* @param <T>
* @return
*/
public static <T> List<T> mergeListsTwo(List<T>... lists) {
return mergeListsTwo(true, lists);
}
}
测试方法:
public class ListUtilTest {
/**
* 测试合并多个list
*/
@Test
public void testMergeLists() {
// String类型
/*List<String> list1 = new ArrayList<String>();
list1.add("张三");
list1.add("张三");
list1.add("李四");
list1.add("王五");
List<String> list2 = new ArrayList<String>();
list2.add("老张");
list2.add("老张");
list2.add("老李");
list2.add("老王");
*//*List<String> list = new ArrayList<String>();
list.addAll(list1);
list.addAll(list2);*//*
List<String> list = ListUtil.mergeLists(false, new List[]{list1, list2});*/
// Integer类型
List<Integer> list1 = new ArrayList<Integer>();
list1.add(1);
list1.add(2);
list1.add(2);
list1.add(3);
List<Integer> list2 = new ArrayList<Integer>();
list2.add(4);
list2.add(5);
list2.add(5);
list2.add(6);
List<Integer> list = ListUtil.mergeListsTwo(true, new List[]{list1, list2});
System.out.println(list);
}
}