Java 创建地图的问题<;字符串,列表>;

Java 创建地图的问题<;字符串,列表>;,java,Java,下面的查询返回了db中的一行。要选择的列包括rec、head和amount。我想按标题列对行进行排序。我试着用Map-where-string作为标题,用list作为其他两列 我把我的非工作代码贴在了下面。如何将另一个列表附加到重复键的列表中。文档说明它替换同一个键的值,而我需要将它附加到列表值中。如果能得到任何帮助,我将不胜感激 Query q= session.createQuery("select tally_receipt_prefix, tally_receipt_no, tally_

下面的查询返回了db中的一行。要选择的列包括rec、head和amount。我想按标题列对行进行排序。我试着用Map-where-string作为标题,用list作为其他两列

我把我的非工作代码贴在了下面。如何将另一个列表附加到重复键的列表中。文档说明它替换同一个键的值,而我需要将它附加到列表值中。如果能得到任何帮助,我将不胜感激

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);

    }

}
Query q=session.createQuery(“选择tally_-receive_前缀、tally_-receive_-no、tally_-head、tally_-amount from tally_-table,其中tally_-system_-date=”“+fmtd_-date+”,tally_-dbcr_-indicator='DB'和tally_-mode='Ca'按tally_-head、tally_-receive_-head、tally_;System.out.println(“查询”+q);
列表头=新的ArrayList();
for(迭代器it=q.iterate();it.hasNext();)
{
Object[]行=(Object[])it.next();
payincash1=新建LinkedHashMap();
heads.add((字符串)行[2]);
列表尾=空;
tails=newarraylist();
tails.add((字符串)行[0]);
tails.add((字符串)行[1]);
tails.add((字符串)行[3]);
System.out.println(“iter 1的dao中的头部:“+头部”);
System.out.println(“iter1上的tails in dao:”+tails);
if(heads.contains((String)行[2])//临时列表中的head
{
System.out.println(“输入第一个if”);
if(payincash1.containsKey((字符串)行[2]))
{
System.out.println(“重复时映射:+payincash1”);
payincash1.put((字符串)行[2],尾部);
}
} 
其他的
{
System.out.println(“如果不重复映射:+payincash1”);
payincash1.put((字符串)行[2],尾部);
}
}

听起来更像是你想要一个列表

类似于
Map

然后你会得到像

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);
然后你可以做这样的事情

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);
Map payincash1=newlinkedhashmap();
MyData data=新的MyData(行[0],行[1],行[2],行[3]);
List master=payincash1.get((字符串)行[2]);
if(master==null){
master=新列表();
payincash1.put((字符串)行[2],主控);
}
主添加(数据);

据我所知,你需要库的多重映射。你能用一种更简单的方式问这个问题吗,比如“什么是一个可以有重复项并且有O(logN)搜索的分类容器?”。顺便说一句,这是问题吗?如果我的问题不清楚,对不起。我想在代码中添加heads列表中的键(本例中为字符串)和tails列表中的值(本例中为列表)。对于每个重复的头部,我希望将值(这里的列表)附加到旧值(旧列表)中,我这样做的努力是徒劳的。
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);