2016-03-25 8 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を使用できない場合、guavaライブラリには同様の機能を提供するOrderingクラスが用意されています。たとえば、compoundメソッドは、java 8のthenComparingと同じようにインスタンスを連結する機能を提供します。

関連する問題