多个列表有序归并

/**
 * 需求描述
 * 返回一个map,map中存放的一下的列表
 * 综合排序:List<id> 1,2,3,4,5,6
 * 销量排序:List<id> 6,4,68,9,0,8
 * 价格排序:List<id> 8,2,3,5,6,7,3
 * 处理后的结果:
 * 假定要取出6个数据,预先从指定的列表顺序。在list1中取一个元素,list2中取出一个元素,list3中取出一个元素。如果上一个list中获得值,
 * 继续当前list的下个元素,循环上述操作,直到取到6个元素
 * 得到结果集 1,2,6,4,8,3
 * <p>
 * Created by lijianzhen1 on 2017/6/15.
 */
public class Test {
    public static void main(String[] args) {
        Map<Integer, List<Integer>> unDealWithMap = genrateResultMap();
        Integer[] enums = {1, 2, 3};//对应的枚举数据
        //处理后的结果集合
        Map<Integer, Integer> resultMap = Maps.newHashMap();
        //对应各个列表的游标
        Map<Integer, Integer> vernier = Maps.newHashMap();
        //获得对应的游标初始位置
        for (Integer index : enums) {
            vernier.put(index, 0);
        }
        //默认选择返回的项为6项
        while (resultMap.size() < 6)
            //循环枚举值
            for (Integer index : enums) {
                //获得对应的列表
                List<Integer> list = unDealWithMap.get(index);
                if (CollectionUtils.isNotEmpty(list)) {
                    //列表的大小
                    int size = list.size();
                    Integer element = list.get(vernier.get(index));//获得当前的元素值
                    //是否已经记录
                    boolean isover = false;
                    //当前游标位置不能数组越界
                    while (vernier.get(index) < size) {
                        //已经记录跳出循环
                        if (isover) {
                            break;
                        }
                        //没有获得元素放入map中。如果返回是list在这里修改就好
                        if (null == resultMap.get(element)) {
                            resultMap.put(list.get(vernier.get(index)), list.get(vernier.get(index)));
                            isover = true;
                        }
                        vernier.put(index, vernier.get(index) + 1);
                    }
                }
            }
        System.out.println(resultMap);
    }


    /**
     * 生成需要的列表
     * @return
     */
    private static Map<Integer, List<Integer>> genrateResultMap() {
        List<Integer> list1 = Lists.newArrayList();
        List<Integer> list2 = Lists.newArrayList();
        List<Integer> list3 = Lists.newArrayList();

        int i = 0;
        while (i < 10) {
            list1.add(new Random().nextInt(100));
            list2.add(new Random().nextInt(100));
            list3.add(new Random().nextInt(100));
            i++;
        }
        Map<Integer, List<Integer>> resultMap = Maps.newHashMap();
        resultMap.put(1, list1);
        resultMap.put(2, list2);
        resultMap.put(3, list3);
        return resultMap;
    }
}

猜你喜欢

转载自janle.iteye.com/blog/2379744
今日推荐