一、传统遍历方式
最直接的方法就是使用Iterator进行遍历,代码如下:
Map<String, Integer> map = new HashMap<>(); map.put("apple", 1); map.put("banana", 2); map.put("orange", 3); Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<String, Integer> entry = iterator.next(); System.out.println("key:" + entry.getKey() + " value:" + entry.getValue()); }
上述代码中使用了Iterator遍历Map,通过map.entrySet()方法获取Map中所有Key-Value映射关系的Set集合,再通过Set的iterator()方法获取其迭代器进行遍历。
也可以使用foreach循环来遍历Map:
Map<String, Integer> map = new HashMap<>(); map.put("apple", 1); map.put("banana", 2); map.put("orange", 3); for (Map.Entry<String, Integer> entry : map.entrySet()) { System.out.println("key:" + entry.getKey() + " value:" + entry.getValue()); }
上述代码中使用了foreach循环遍历Map,直接将Map中的Key-Value映射关系(entry)取出,进行操作。
传统遍历方式的优点是简单易用,但是代码较为繁琐,并且Java8中有更加高效的遍历方式。
二、Java8 Map遍历方式
1. forEach + lambda表达式
Map<String, Integer> map = new HashMap<>(); map.put("apple", 1); map.put("banana", 2); map.put("orange", 3); map.forEach((key, value) -> System.out.println("key:" + key + " value:" + value));
上述代码中使用了Map的forEach方法,该方法接收一个BiConsumer函数式接口作为参数。BiConsumer接口中的accept(T t, U u)方法可以接收两个泛型参数,分别代表Map中的Key和Value。
可以通过lambda表达式来替代BiConsumer函数式接口,代码更加简洁明了。
2. stream + forEach + lambda表达式
Map<String, Integer> map = new HashMap<>(); map.put("apple", 1); map.put("banana", 2); map.put("orange", 3); map.entrySet().stream().forEach((entry) -> System.out.println("key:" + entry.getKey() + " value:" + entry.getValue()));
上述代码中,map.entrySet()方法获取Map中的所有Key-Value映射关系,再通过stream()方法获取Stream,使用forEach方法进行遍历。使用Stream可以更轻松地进行多条件筛选和排序等操作。
3. Map.Entry + forEach + lambda表达式
Map<String, Integer> map = new HashMap<>(); map.put("apple", 1); map.put("banana", 2); map.put("orange", 3); map.entrySet().stream().forEach(entry -> { String key = entry.getKey(); Integer value = entry.getValue(); System.out.println("key:" + key + " value:" + value); });
上述代码中,使用了Map中的entrySet()方法获取所有Key-Value映射关系的Set集合,并使用forEach方法进行遍历。在forEach中,对于每一个entry,可以使用getKey()方法获取Key,使用getValue()方法获取Value。
可以根据需求选择以上三种方式中的一种进行Map的遍历,Java8提供了更加简洁高效的遍历方式,提高了编程效率。