/** * 需求描述 * 返回一个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
今日推荐
周排行