我想遍历hashmap这种操作,就像一些Linux命令一样,记忆了一百遍然而在用的时候还是会忘吧。今天痛下决心记录一下,只记录两种推荐的方式:
当使用key和value时:
Map<Object,Object> map = new HashMap<>();
for (Entry<Object,Object> entry : map.entrySet()) {
entry.getKey();
entry.getValue();
}
当仅使用key时候:
for (String key : map.keySet()) { // action }
可以使用foreach表达式,但是如果循环内部用到的变量,这个变量的要求是:
Local variable *** defined in an enclosing scope must be final or effectively final
该规则也会在内部类使用的时候发生,本次例子如下:
List<Object> empList = service.method();
if(CollectionUtils.isEmpty(empList)) {
Map<Long,Map<String,Object>> employeeViewMapList=new HashMap<>();
//操作employeeViewMapList
employeeViewMapList.forEach((k,emap) -> empList.add(emap));
}
这个时候发生一件事,当返回是空的时候,你就要把empList初始化一下,然而对empList的再次初始化行为会被认为不是final等效的,所以这种写法无法通过,会报如上错误。
这个时候应该把foreach的写法变为 entrySet的形式替代:
for(Entry<Long,Map<String,Object>> entry : employeeViewMapList.entrySet()) {
empList.add(entry.getValue());
}
不过foreach的遍历方式: items.forEach((k,v)->System.out.println("key : " + k + "; value : " + v));真的好用,还是要记住。
网友评论