使用来自Google的Guava的新系列,我正在构建一个地图并将值添加为
multimap.put("Date",somestring);
multimap.put("AccountNo",somestring);
multimap.put("Amount",somestring);
multimap.put("Status",somestring);
现在,在遍历地图的过程中,我希望以与放置在地图中的顺序相同的顺序检索值,如
12-01-2015 909123423133 2000 004
12-02-2015 909123423134 3000 005
12-03-2015 909123423135 4000 006
12-04-2015 909123423136 5000 007
我迭代的方式首先检索所有日期,然后检索所有帐户号,然后是金额,最后是所有状态。
Iterator itr= ejLogMap.entries().iterator();
//System.out.println("Map Size:"+ejLogMap.size());
while(itr.hasNext()){
Map.Entry pair= (Map.Entry)itr.next();
System.out.println(pair.getKey() + " = " + pair.getValue());
//itr.remove();
}
答案 0 :(得分:1)
LinkedListMultimap
其中迭代顺序对应于插入顺序。
我想你可以使用那个类,或者只是重新考虑一个多图是否真的是你想要的。
对于您在评论中描述的内容,我建议编写一个包含信息(date,accountNo,...)的新类,并将此类的实例插入到ArrayList,LinkedList,......
答案 1 :(得分:0)
假设您的多图实例是ListMultimap<String, String>
的子类以保留插入顺序和,您按顺序插入了(date,accountNo,...),那么以下内容应该为您提供预期产出。
Iterator<String> dates = ejLogMap.get("Date").iterator();
Iterator<String> accounts = ejLogMap.get("AccountNo").iterator();
while (dates.hasNext() && accounts.hasNext()) {
System.out.println(dates.next() + " " + accounts.net());
}
编辑 -
在您的设计中,数据按列("Date"
,"AccountNo"
,...)进行组织。您可以在行中重新组织它,其中每个项目实际上是一个元组(date,accountNo,amount,status),可以在特定的POJO类中实现,例如:
public class Transaction {
String accountNo;
int amount;
Date date;
int status; // or an enum
// constructor
// getters
}
然后,如果事务是唯一的List<Transaction>
,您可以轻松处理Set<Transaction>
甚至更好,在您想要的属性上对其进行排序,过滤它等,保持每个事务对象的一致性。如果您经常需要在特定属性上查找Transaction
个对象,则可以构建一个Map<T, Transaction>
,其中密钥是 - 例如 - accountNo。如果您需要保留广告订单,请使用LinkedHashMap<T, Transaction>
。