我有这个查询,我为此写了一个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;
}
我需要返回已排序的列表而不仅仅是列表。
答案 0 :(得分:1)
在java 8中,Comparator类采用了许多有用的方法,可以轻松地创建比较器和链式比较以及各种thenComparing选项。
如果你不能使用java 8,那么guava库提供了Ordering类,它提供了类似的功能。例如,compound方法提供了链接实例的能力,就像java 8中的thenComparing一样。