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