List合并与排序

    最近由于工作原因,需要将两个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;
        }
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值