我有一个查询,我为其编写了一个 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;
}
我需要返回排序后的列表,而不仅仅是列表。
最佳答案
在 java 8 中,Comparator类选择了许多有用的方法,可以轻松创建比较器和与各种 thenComparing 一起进行链比较。选项。
如果您无法使用 java 8,guava 库提供 Ordering类,它提供类似的功能。例如,compound方法提供了链接实例的能力,就像 java 8 中的 thenComparing 一样。
关于java - 如何使用比较器对集合中的多个字段进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36222744/