java怎么遍历map
1、创建一个简单的Map,存储了3个人名与年龄,其中一个年龄数据缺失。
Map<String, Integer> map = new HashMap<>();map.put("Tom", 15);map.put("Jack", 17);map.put("John", null);

1、只需要遍历key 的话,使用map接口的keySet方法取出装满所有key的一个Set,遍历keySet就行
for (String key : map.keySet()) { System.out.println("key:" + key);}


1、与遍历key的用法类似
for (Integer value : map.values()) { System.out.println("value:" + value);}


1、key和value都需要的话,使用entrySet方法速度比用keySet取出来,再根据key在map中取value更快。
for (Map.Entry<String, Integer> entry : map.entrySet()) { System.out.println("key:" + entry.getKey() + ",value:" + entry.getValue());}


1、遍历时需要删除的话,可以使用Iterator。比如删除年龄为空的人。
Iterator<Map.Entry<String, Integer>> entries = map.entrySet().iterator();while (entries.hasNext()) { Map.Entry<String, Integer> entry = entries.next(); System.out.println("key:" + entry.getKey() + ",value:" + entry.getValue()); if(entry.getValue()==null){ entries.remove(); }}

1、java8的Map与Set接口新增了foreach方法,可以在后面使用lambda表达式,简洁程度不亚于foreach循环,可读性要更好。下面2种方式似乎第二种更啰嗦,但是map.entrySet()后面可接强大的stream方法,进行各种对集合的强大操作。
map.forEach((key, value) -> { System.out.println("key:" + key + ",value:" + value);});map.entrySet().forEach(entry -> { System.out.println("key:" + entry.getKey() + ",value:" + entry.getValue());});


2、假如我想去掉集合种value为空的键值对,并且以json字符串的形式打印这个Map,使用java8的流式数据处理方法可以用最为简洁易读的方式实现它。Map不能直接转化为流,需要先转化为Set。
String json = map.entrySet().stream() .filter(entry -> entry.getKey() != null) .map(entry -> entry.getKey() + ":" + entry.getValue()) .collect(Collectors.joining(",","{","}"));System.out.println(json);
