java - 如何使用比较器对集合中的多个字段进行排序?

标签 java sql database comparator

我有一个查询,我为其编写了一个 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/

相关文章:

mysql - 如何包含缺少一半连接的记录?

php - HTML 中带有子菜单的动态菜单

MySQL - 独特的豁免

java - 音频分析 : frequency vs pitch

java - 如何创建一个类的多个实例?

sql - 在子查询中使用 DISTINCT 时如何重写子查询以使用连接?

php - 从数据库获取记录值并将其内爆

java - 空校验编码标准

java - 为什么 GregorianCalendar 根据系统时间(AM/PM)设置 HOUR

c# - SQL TO Linq,如何返回对象并填充属性