2017-02-28 13 views
0

ここでは、1つの応答として2つの結果を返そうとしていますが、どのオプションが良いかどうかはわかりません。 は、ここではそれが 1つのJavaメソッドから複数のオブジェクトを返す方法は?

List<FixedDeposit> fdList = em.createQuery(sb.toString()) 
      .setParameter("start", dateFrom) 
      .setParameter("end", dateTo) 
      .setFirstResult(start).setMaxResults(limit) 
      .getResultList(); 

ので、私は

List<FDSearchResult> searchList = getSearchResult(fdList); 
response.setData(searchList); 
return response; 

としてそれを持っているそして今、再び私は別の応答を返すようにしたい、リストとして返します。これは計算です

Double sum = 0.0; 
sum = (Double) em.createQuery("SELECT SUM(deposit_amount)FROM fd_fixed_deposit where fd.status in ('ACT','REN','WDR') and fd.maturityDate between :start and :end ") 
       .setParameter("start", dateFrom) 
       .setParameter("end", dateTo).getSingleResult(); 

どのようにして合計の応答で結果を返すことができますか?あなたは結果オブジェクトを経由して、関連するすべてのデータを返すことができ

public Response<List<FDSearchResult>> loadMaturedFDByRange(String fromDate, String toDate, final Integer start, 
     final Integer limit) { 
    final Response<List<FDSearchResult>> response = new Response<List<FDSearchResult>>(); 
    Date dateFrom = DateUtils.parseDate("dd/MM/yyyy", fromDate, null); 
    Date dateTo = DateUtils.parseDate("dd/MM/yyyy", toDate, null); 
    Long count = 0L; 
    Double sum = 0.0; 
    try { 
     count = (Long) em.createQuery("SELECT COUNT(fd) FROM FixedDeposit fd where fd.status in ('ACT','REN','WDR') " 
       + "and fd.maturityDate between :start and :end ") 
       .setParameter("start", dateFrom) 
       .setParameter("end", dateTo).getSingleResult(); 
    } catch (NoResultException nre) { 
     count = 0L; 
    } 
    StringBuilder sb = new StringBuilder(); 
    sb.append("SELECT fd FROM FixedDeposit fd where fd.status in ('ACT','REN','WDR') and fd.maturityDate between :start and :end "); 
    List<FixedDeposit> fdList = em.createQuery(sb.toString()) 
      .setParameter("start", dateFrom) 
      .setParameter("end", dateTo) 
      .setFirstResult(start).setMaxResults(limit) 
      .getResultList(); 

    sum = (Double) em.createQuery("SELECT SUM(deposit_amount)FROM fd_fixed_deposit where fd.status in ('ACT','REN','WDR') and fd.maturityDate between :start and :end ") 
       .setParameter("start", dateFrom) 
       .setParameter("end", dateTo).getSingleResult(); 

    List<FDSearchResult> searchList = getSearchResult(fdList); 
    response.setData(searchList); 
    response.setPagination(new Response().new PaginationInfo(count)); 
    return response; 
} 
+1

たぶん、あなたは[配列](https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html)を探しています。 – Mistalis

+0

マップを返すと助けになるので、オブジェクトを整理することができます – DamCx

+0

いつもその型の2つのオブジェクトになる場合は、両方を格納する別のオブジェクトを作成して返します。 –

答えて

3

この例では、これら2つのオブジェクトを保持し、代わりにそのオブジェクトを返すオブジェクトコンテナを作成します。

public class MyContainer 
{ 
    List<FixedDeposit> fdList; 
    List<FDSearchResult> searchList; 

    public MyContainer() 
    { 

    } 
} 

これは私がこれにアプローチする方法です。

+0

これは動作します。ありがとうクイントンDelpeche :) – Shantha

+0

あなたは大歓迎です。 8-} –

1

、私は完全な方法を掲載します

を助けてください。 必要な値をすべて取得できる新しいクラスを作成するだけです。

0

つのオプション:

  1. のHashMap。タイプオブジェクトをレスポンスに、ダブルをそれぞれダブルにタイプします。これは良い方法ではありません

  2. さまざまなオブジェクトタイプをカプセル化できるカスタムクラスを作成できます。 Genericsがここに必要です。

    public class MultiReturn<T> { 
        public final String name; 
        public final T object; 
    
        public NamedObject(String name, T object) { 
        this.name = name; 
        this.object = object; 
        } 
    } 
    
関連する問題