`

ComparatorChain +Collections.sort

    博客分类:
  • Java
 
阅读更多

使用案例1:

  private List<Inventory> sortByRule(List<InventoryWrap> inventoryWraps
				,String turnOverMode) {
        //收集排序规则
        List<SortRule> sortRules = new ArrayList<SortRule>();
        //先按照库存周转排序
        if(turnOverMode != null){
        	if (TurnOverMode.FIFO_STORAGEDATE.equals(turnOverMode)) {
        		sortRules.add(new SortRule(2, "batch", "ASC"));//expireDate
        	} else if (TurnOverMode.LIFO_STORAGEDATE.equals(turnOverMode)) {
        		sortRules.add(new SortRule(2, "batch", "DESC"));//expireDate
        	} else if (TurnOverMode.FIFO_VALIDDATE.equals(turnOverMode)) {
        		sortRules.add(new SortRule(1, "batch", "ASC"));//expireDate
        	} else if (TurnOverMode.LIFO_VALIDDATE.equals(turnOverMode)) {
        		sortRules.add(new SortRule(1, "batch", "DESC"));//expireDate
        	} 
        }
       	//参考库位编号顺序排列,保证一个库位的库存在一起
       	sortRules.add(new SortRule(3, "locationIndex", "ASC"));
       	sortRules.add(new SortRule(4, "locationCode", "ASC"));
        //构造排序Chain
        ComparatorChain chain =  new ComparatorChain();
        for (SortRule sortRule : sortRules) {
            if (sortRule.getSortMethod().equals("DESC")) {
                chain.addComparator(new ReverseComparator(
					new BeanComparator(sortRule.getSortKey())));
            } else {
                chain.addComparator(
					new BeanComparator(sortRule.getSortKey()));
            }
        }
        
        //排序处理
        Collections.sort(inventoryWraps,chain);
       
        //将托盘库存排到非托盘库存前
        List<Inventory> tempInvs1 = new ArrayList<Inventory>();
        List<Inventory> tempInvs2 = new ArrayList<Inventory>();
        for(InventoryWrap inventoryWrap : inventoryWraps){
        	if(inventoryWrap.getInventory().getLP() == null){
        		tempInvs2.add(inventoryWrap.getInventory());
        	}else{
        		tempInvs1.add(inventoryWrap.getInventory());
        	}
        }
        tempInvs1.addAll(tempInvs2);
        return tempInvs1;
    }
	//-----------------------------SortRule.java------------------
	public class SortRule {
		private int sortIndex;
		private String sortKey;
		private String sortMethod;
	}
	//-----------------------------InventoryWrap.java-------------
	public class InventoryWrap{
		private Inventory inventory;
		private Date storageDate;
		private Date productionDate;//生产日
		private Date expireDate;//失效日
		private Integer convertFigure;
		private Integer locationIndex;//库位排序号
		private String locationCode;
		private String locationStatus;
		private double locationUsedRate;
		private Integer lpIndex;
		private Long locationId;
		private double avaliableQuantity;
		private String batch;
	}

 使用案例2:

	private List<OperatingDailyTemp> sortByRule(List<InventoryWrap> inventoryWraps) {
		//收集排序规则
        List<SortRule> sortRules = new ArrayList<SortRule>();
    	sortRules.add(new SortRule(1, "itemCode", "ASC"));
 		sortRules.add(new SortRule(2, "batch", "ASC"));
 		 //构造排序Chain
         ComparatorChain chain =  new ComparatorChain();
         for (SortRule sortRule : sortRules) {
             if (sortRule.getSortMethod().equals("DESC")) {
                 chain.addComparator(new ReverseComparator(
					new BeanComparator(sortRule.getSortKey())));
             } else {
                 chain.addComparator(
					new BeanComparator(sortRule.getSortKey()));
             }
         }
         //排序处理
        Collections.sort(inventoryWraps,chain);
        
        List<OperatingDailyTemp> tempInvs = 
			new ArrayList<OperatingDailyTemp>();
        for(InventoryWrap inventoryWrap : inventoryWraps){
        	tempInvs.add(inventoryWrap.getTemp());
        }
        return tempInvs;
    }
	//------------------InventoryWrap.java----
	public class InventoryWrap{
		private OperatingDailyTemp temp;
		private String itemCode;
		private String batch;
	}
	//----------------SortRule.java----
	public class SortRule {
		private int sortIndex;
		private String sortKey;
		private String sortMethod;
	}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics