我的地图被声明为private Map accountByReport;
在将相应的部门帐户添加到密钥之前,我使用以下循环来检查reportID
是否在地图中。我的循环是否正确,此实例中的类型声明应该是什么?如何捕获异常?
for(Entity entity : entities) {
if(accountsByReport.containsKey(entity.getReportID())) {
((List<String>)accountsByReport.get(entity.getReportID())).add(entity.getDepAccount());
} else {
accountsByReport.put(entity.getReportID(), new ArrayList<String>().add(entity.getDepAccount()));
}
}
答案 0 :(得分:1)
看来你正在向else中的地图添加一个布尔值(返回ok .add()
)。
我会用这种方式:
for(Entity entity : entities) {
if(accountsByReport.containsKey(entity.getReportID())) {
((List<String>)accountsByReport.get(entity.getReportID())).add(entity.getDepAccount());
} else {
List<String> list = new ArrayList<String>();
list.add(entity.getDepAccount());
accountsByReport.put(entity.getReportID(), list);
}
}
您没有粘贴地图定义,但您应该使用输入参数 - 即Map<String, List<String>> accountsByReport = new HashMap<String, List<String>>();
,这样您就不需要在.get
之后进行投射
事实上你粘贴了它。
使用:private Map<String, List> accountByReport;
请参阅http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html
答案 1 :(得分:1)
到目前为止您的代码是正确的,但您的Map
应声明类型
应根据reportID的类型
声明地图//if String
private Map<String, List<String>> accountByReport;
//if int
private Map<Integer, List<String>> accountByReport;
//so on
答案 2 :(得分:0)
你的循环基本上是正确的。您可以做的唯一改进是执行单个get并存储结果,而不是同时执行contains和get。你也应该使用泛型,这样你就不需要演员......
List<String> list = accountsByReport.get(entity.getReportID())
if(list != null) {
list.add(entity.getDepAccount());
} else {
accountsByReport.put(entity.getReportID(), new ArrayList<String>().add(entity.getDepAccount()));
}