📅  最后修改于: 2023-12-03 15:06:46.501000             🧑  作者: Mango
在Java中,处理Map流时,我们有时需要将其“展平”,也就是将一个Map中的所有键值对取出来,组成一个新的流。使用forEach循环可以实现这一操作。
在正式介绍展平Map流的方法之前,我们先来准备一下需要用到的变量和方法。
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, Integer> map1 = new HashMap<>();
map1.put("a", 1);
map1.put("b", 2);
Map<String, Integer> map2 = new HashMap<>();
map2.put("c", 3);
map2.put("d", 4);
Map<String, Map<String, Integer>> map = new HashMap<>();
map.put("map1", map1);
map.put("map2", map2);
flattenMap(map);
}
public static void flattenMap(Map<String, Map<String, Integer>> map) {
// 待实现
}
}
在这段示例代码中,我们定义了一个Map变量map,这个变量包含了两个子Map,也就是我们需要展平的“源数据”。
同时,我们还定义了一个flattenMap方法,该方法将要用来展平Map流。
在Java 8之后,Map类提供了一个非常方便的方法entrySet(),它将Map转换为Set,其中的每个元素都是一个键值对的Entry对象。我们可以在Entry对象上使用forEach循环,来遍历所有的键值对。
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, Integer> map1 = new HashMap<>();
map1.put("a", 1);
map1.put("b", 2);
Map<String, Integer> map2 = new HashMap<>();
map2.put("c", 3);
map2.put("d", 4);
Map<String, Map<String, Integer>> map = new HashMap<>();
map.put("map1", map1);
map.put("map2", map2);
flattenMap(map);
}
public static void flattenMap(Map<String, Map<String, Integer>> map) {
map.entrySet().forEach(entry -> {
String key = entry.getKey();
Map<String, Integer> value = entry.getValue();
System.out.println("Key: " + key);
value.entrySet().forEach(subEntry -> {
String subKey = subEntry.getKey();
Integer subValue = subEntry.getValue();
System.out.println(" Subkey: " + subKey + ", Value: " + subValue);
});
});
}
}
运行该程序,可以看到输出结果如下:
Key: map1
Subkey: a, Value: 1
Subkey: b, Value: 2
Key: map2
Subkey: c, Value: 3
Subkey: d, Value: 4
这样,我们就成功地将一个Map流展平成了键值对流,并输出了每个键值对的内容。
使用forEach循环在Java中展平Map流非常简单,只需要将Map转换为Entry对象,再在Entry对象上使用forEach循环即可。这样,我们可以方便地遍历每个键值对,进行进一步的处理。