最近由于工作原因,需要将两个List合并,合并取出来的东西要按照片一定的顺序。两个List都是存放int一维数组,并且两个List中的数组结构都是一样的,第一列存放的是ID,第二列存放的是数量count。两个List中都有部分ID是相同的,如果相同,则相对应的count相加,最后是按ID的大小来排序。代码如下:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
/**
*合并两个List,并且排序
* @author Wangcan
*/
public class CoalitionList {
public static void getList(ArrayList listTemp1, ArrayList listTemp2, ArrayList list) {
if (listTemp1 == null && listTemp2 == null) {//两个list都为空的时候
list = null;
} else if (listTemp1 == null && listTemp2 != null) {//listTemp1为空的时候
list = listTemp2;
} else if (listTemp1 != null && listTemp2 == null) {//listTemp2为空的时候
list = listTemp1;
} else {//两个list都不为空时候
//首先判断listTemp2中是与listTemp1中相同的对象,有则将这两个对象合并,没有则只添加listTemp2
Iterator it2 = listTemp2.iterator();
while (it2.hasNext()) {
int[] data2 = (int[]) it2.next();
Iterator it1 = listTemp1.iterator();
while (it1.hasNext()) {
int[] data1 = (int[]) it1.next();
if (data1[0] == data2[0]) {
data2[1] += data1[1];
break;
}
}
list.add(data2);
}
//然后判断listTemp1中是有与listTemp2中不同的对象,只添加listTemp1中不同的对象
boolean flag = false;
Iterator it1 = listTemp1.iterator();
while (it1.hasNext()) {
int[] data1 = (int[]) it1.next();
Iterator it3 = listTemp2.iterator();
while (it3.hasNext()) {
int[] data2 = (int[]) it3.next();
if (data1[0] == data2[0]) {
flag = true;
break;
}
}
if (flag == false) {
list.add(data1);
}
flag = false;
}
//list排序
Mycomparator mycomparator = new Mycomparator();
Collections.sort(list, mycomparator);
}
}
}
/**
*排序规则
*/
class Mycomparator implements Comparator {
public int compare(Object arg0, Object arg1) {
int[] data1 = (int[]) arg0;
int[] data2 = (int[]) arg1;
//比较data[0]
if (data1[0] > data2[0]) {
return 1;
} else {
return 0;
}
}
}