2016-03-25 51 views
0

我有这个查询,我写了一个DAL为基本上运行搜索条件,如果找到,将其添加到列表。但我遇到的问题是根据字段对列表进行排序。如何使用比较器对集合中的多个字段进行排序?

例如,

 select * from HELLO.TABLE Where total=? and max = ? 
    ORDER BY FRLevel DESC, TransferLevel DESC, PriorLimitsLevel DESC 

如何使用比较这些字段进行排序。这是我的Java代码,

public List<PgmTierCriteriaVO> getCriteriaListForAL(DriverVO driverVO, 
     String productType, PolicyVersionVO policyVersionVO, String rateDate) 
     throws Exception { 

    String pgmCode = driverVO.getPgmCode().trim(); 
    String versionType = policyVersionVO.getVersionType().trim(); 
    String pgmCodeShort = pgmCode.substring(0, 5); 

    PgmTierCriteriaID pgmTierCriteriaID = new PgmTierCriteriaID(); 
    pgmTierCriteriaID.setPgmCode(pgmCode); 
    List<PgmTierCriteriaVO> pgmCriteriaVOList = pgmPayPlanService 
      .getPgmTierCriteriaList(pgmTierCriteriaID); 
    List<PgmTierCriteriaVO> pgmCriteriaVOListAL = new ArrayList<PgmTierCriteriaVO>(); 

    if (productType != null && rateDate != null) { 
     if (productType.equalsIgnoreCase("PPA")) { 

      for (PgmTierCriteriaVO pgmTierCriteriaVO : pgmCriteriaVOList) { 
       if (pgmTierCriteriaVO.getAppliesToCode() != null) { 

        if ((StringUtil.getDate(rateDate).after(pgmTierCriteriaVO.getEffDate()) 
         || StringUtil.getDate(rateDate).equals(pgmTierCriteriaVO.getEffDate())) 
         && StringUtil.getDate(rateDate).before(pgmTierCriteriaVO.getExpDate()) 
         && (pgmTierCriteriaVO.getAppliesToCode().trim().equalsIgnoreCase("B") 
         || pgmTierCriteriaVO.getAppliesToCode().trim().equalsIgnoreCase(versionType))) { 
         pgmCriteriaVOListAL.add(pgmTierCriteriaVO); 
        } else { 
         pgmCriteriaVOListAL = null; 
        } 
       } 
      } 
     } 

     else if (productType.equalsIgnoreCase("CV")) { 

      for (PgmTierCriteriaVO pgmTierCriteriaVO : pgmCriteriaVOList) { 
       if (pgmTierCriteriaVO.getAppliesToCode() != null) { 

        if ((StringUtil.getDate(rateDate).after(pgmTierCriteriaVO.getEffDate()) 
         || StringUtil.getDate(rateDate).equals(pgmTierCriteriaVO.getEffDate())) 
          && StringUtil.getDate(rateDate).before(pgmTierCriteriaVO.getExpDate()) 
          && pgmCodeShort.equalsIgnoreCase(pgmTierCriteriaVO.getPgmCode().substring(0, 5)) 
          && (pgmTierCriteriaVO.getAppliesToCode().trim().equalsIgnoreCase("B") 
          || pgmTierCriteriaVO.getAppliesToCode().trim().equalsIgnoreCase(versionType))) { 
         pgmCriteriaVOListAL.add(pgmTierCriteriaVO); 
        } else { 
         pgmCriteriaVOListAL = null; 
        } 
       } 
      } 

     } 
    } 
    return pgmCriteriaVOListAL; 
} 

我需要返回排序的列表,而不是只是列表。

回答

1

在java 8中,Comparator类采用了许多有用的方法,以便于创建比较器和链比较以及各种thenComparing选项。

如果你不能使用java 8,番石榴库提供了Ordering类,它提供了类似的功能。例如,compound方法提供了链接实例的能力,就像java 8中的thenComparing一样。

相关问题