1

データベースのクエリとリストへのデータの追加に使用するコードを以下に示します。

Query q= session.createQuery("select tally_receipt_prefix, tally_receipt_no,           tally_head, tally_amount from Tally_table where tally_system_date='"+fmtd_date+"' and tally_dbcr_indicator='DB' and tally_mode='Ca' order by  tally_head,tally_receipt_prefix,tally_receipt_no");

    payincash = new ArrayList();

    for(Iterator it=q.iterate(); it.hasNext(); )
    {
        Object[] row= (Object[]) it.next();
        payincash.add((String)row[0]);
        payincash.add((String)row[1]);
        payincash.add((String)row[2]);
        payincash.add((String)row[3]);

    }

    System.out.println("cash list in dao: "+payincash);

返されるリストは [prefix1, no1, head1, amt1, prefix2, no2, head2, amt2,] のようになります。次の行でjspで領収書を作成しようとしています

頭1

prefix1/no1 amt1

prefix2/no2 amt 2


頭3

prefix3/no3 amt3

そのため、領収書のヘッダー列ですべてのレコードをグループ化したいようです-jspファイル。どうすればいいですか?どんな助けでも大歓迎です。私の英語を許してください。

編集:これが私が試したものです、

Query q= session.createQuery("selecttally_receipt_prefix,tally_receipt_no,tally_head,tally_amount from Tally_table wheretally_system_date='"+fmtd_date+"' andtally_dbcr_indicator='DB' andtally_mode='Ca' order bytally_head,tally_receipt_prefix,tally_receipt_no"); System.out.println("クエリ"+q);

    List heads=new ArrayList();

    for(Iterator it=q.iterate(); it.hasNext(); )
    {
        Object[] row= (Object[]) it.next();

        payincash1=new LinkedHashMap<String, List>();

        heads.add((String)row[2]);

        List tails = null;
        tails=new ArrayList();
        tails.add((String)row[0]);
        tails.add((String)row[1]);
        tails.add((String)row[3]);

        System.out.println("heads in dao from iter 1: "+heads);  
        System.out.println("tails in dao from iter1 on: "+tails);

        if(heads.contains((String)row[2]))  // for head in temp list
        {
            System.out.println("in first if");
            if(payincash1.containsKey((String)row[2]))     
            {
                System.out.println("map if repeat: "+payincash1);
                payincash1.put((String)row[2],tails);
            }

        } 
        else
        {

            System.out.println("map if not repeat: "+payincash1);
            payincash1.put((String)row[2], tails);

        }

    }
4

2 に答える 2

1

領収書の頭の列はどこに保管されていますか?どの列で?
私の謙虚な意見では、それはデータベースにも保存されるべきです。
ヘッド情報がDBの「head」列に保持されているとしましょう。したがって、次を追加してクエリを変更する必要があります。

order by head

最後に。
その後、結果を繰り返し処理し、次のようなデータ構造で情報を保持する必要があります。

Map<String,List<ReceiptInformation> map = new HashMap<>(); //using JDK7 syntax here

マップのキーは、各反復の「head」の値である必要があります。マップの値は、ReceiptInfoオブジェクトを保持するArrayList(またはListを実装する他のクラス)である必要があります。
ReceiptInfoObjectは、レコードごとに残りのすべての値を保持します。
次に、map.keySet()コレクションを反復処理し、キーごとにヘッドをprtingしてから、内部ループを使用してレシートを印刷できます。

質問をしたユーザーの要求ごとに編集:
新しいエントリ(つまり、マップに新しいRecepitInformationオブジェクト)を追加するには、次の手順を実行する必要があります。

List<RecepitInformation> listForHead = map.get(headValue);
if (listForHead == null) {
   listForHead = new ArrayList<ReceiptInformation>();
   map.put(headValue,listForHead);
}
listForHead.add(recepitInformation);

いつものように、私はこれをコンパイルしませんでしたが、私はそれがうまくいくはずだと思います

于 2012-08-28T10:03:40.667 に答える
1

GSコレクションではリストを使用できます。リストがMutableListである限り、groupBy (関数) 。JDKリストの場合、Iterate.groupBy(Iterable、Function)を使用できます。groupByの結果はMultimapになります。

于 2012-09-06T15:48:22.127 に答える