2

以下のクエリによって返されるdbの行があります。選択する列には、rec、head、amountが含まれます。行をヘッド列で並べ替えたい。ヘッドの文字列と他の2つの列のリストをマップしてみました。

以下に投稿された機能しないコードで壁にぶつかりました。繰り返されるキーのリストに別のリストを追加するにはどうすればよいですか。ドキュメントによると、同じキーの値が置き換えられますが、リストの値に追加する必要があります。私はどんな助けにも本当に素晴らしいでしょう。

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"); System.out.println("query "+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

4

私が理解していることから、グアバライブラリのマルチマップが必要です。

于 2012-08-29T03:02:56.833 に答える
4

リストのリストが必要なように思えます

何かのようなものMap<String, List<List>>

その後、次のような結果になります...

Map<String, List<List>> payincash1 = new LinkedHashMap<String, List<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);

List master = payincash1.get((String)row[2]);
if (master == null) {

    master = new List();
    payincash1.put((String)row[2], master);

}

master.add(tails);

さて、個人的には、このすべての情報を含む「データ」オブジェクトを作成します。

public class MyData {
    private String rec, head, amount, ??; // Apparently you have another variable I don't know about
    public MyData(String rec, String head, String amount, String ??) {
        // Initalise...
    }
    // Setters and getters not inclueded
}

次に、このようなことができます...

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

MyData data = new MyData(row[0], row[1], row[2], row[3]);

List master = payincash1.get((String)row[2]);
if (master == null) {

    master = new List<MyData>();
    payincash1.put((String)row[2], master);

}

master.add(data);

どちらが少しきれいですか(私見)

于 2012-08-29T02:49:24.473 に答える