遍历Hashmap方式以及本地变量问题

2019-03-11  本文已影响0人  暗夜行者

我想遍历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));真的好用,还是要记住。

上一篇下一篇

猜你喜欢

热点阅读