您的位置:

Java8 Map遍历方法详解

一、传统遍历方式

最直接的方法就是使用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提供了更加简洁高效的遍历方式,提高了编程效率。