
本文将详细介绍如何使用 Java 8 的 Stream API 将一个嵌套的 Map 结构进行扁平化处理,并从中提取所需的数据。 具体来说,我们将把 Map<Integer, Map<String, List<String>>> 转换为 Map<String, String>,其中新 Map 的键是原内部 Map 的键,值是原内部 Map 的 List 的第一个元素。 正如上面摘要所描述的,本文将提供完整的代码示例和详细的解释,帮助读者掌握这种常用的数据处理技巧。
关键在于使用 flatMap 方法。 flatMap 允许我们将一个 Stream 中的每个元素转换为另一个 Stream,然后将所有这些 Stream 连接成一个单独的 Stream。 在我们的例子中,我们需要将 ip.values() 返回的 Stream<Map<String, List<String>>> 转换为 Stream<Map.Entry<String, List<String>>>,也就是将每个内部 Map 转换为其 entry set 的 Stream。
Collectors.toMap 用于将 Stream 中的元素收集到一个 Map 中。 它接受两个 Function 作为参数:一个用于提取键,另一个用于提取值。 在我们的例子中,键是 Map.Entry 的键,值是 Map.Entry 的值(即 List)的第一个元素。
以下是完整的代码示例:
立即学习“Java免费学习笔记(深入)”;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class MapFlattening {
public static void main(String[] args) {
Map<Integer, Map<String, List<String>>> ip = new HashMap<>();
Map<String, List<String>> iip1 = new HashMap<>();
List<String> ilp1 = new ArrayList<>();
ilp1.add("Uno");
ilp1.add("Dos");
ilp1.add("Tres");
iip1.put("Alpha", ilp1);
Map<String, List<String>> iip2 = new HashMap<>();
List<String> ilp2 = new ArrayList<>();
ilp2.add("One");
ilp2.add("Two");
ilp2.add("Three");
iip2.put("Beta", ilp2);
Map<String, List<String>> iip3 = new HashMap<>();
List<String> ilp3 = new ArrayList<>();
ilp3.add("Eins");
ilp3.add("Zwei");
ilp3.add("Drei");
iip3.put("Gamma", ilp3);
ip.put(1, iip1);
ip.put(2, iip2);
ip.put(3, iip3);
Map<String, String> op = ip.values().stream()
.flatMap(e -> e.entrySet().stream())
.collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().get(0)));
System.out.println(op); // 输出: {Alpha=Uno, Beta=One, Gamma=Eins}
}
}ip.values().stream(): 这部分获取 ip Map 中所有值的集合 (即内部的 Map<String, List<String>>),并将它们转换为一个 Stream。
.flatMap(e -> e.entrySet().stream()): 这部分使用 flatMap 方法。 对于 Stream 中的每个内部 Map (e),它将其转换为一个包含 Map.Entry 的 Stream (使用 e.entrySet().stream())。 flatMap 将所有这些 Map.Entry 的 Stream 连接成一个单独的 Stream。
.collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().get(0))): 这部分使用 Collectors.toMap 将 Stream 中的 Map.Entry 收集到一个新的 Map 中。
本文详细介绍了如何使用 Java 8 的 Stream API 扁平化嵌套的 Map 结构,并提取所需的数据。 flatMap 和 Collectors.toMap 是 Stream API 中非常强大的工具,可以用于处理各种复杂的数据转换场景。 通过掌握这些技巧,可以编写出更加简洁、高效的代码。
以上就是Java 8 使用 Stream API 扁平化嵌套 Map 并提取首个元素的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号