首页 >Java >java教程 >如何高效地将Java列表转换为Map?

如何高效地将Java列表转换为Map?

Susan Sarandon
Susan Sarandon原创
2024-11-30 02:53:11517浏览

How Can I Efficiently Convert a Java List to a Map?

如何在 Java 中将列表转换为映射:最佳方法

在 Java 中将列表转换为映射是一项常见任务,可以通过多种方式实现。一种方法是迭代列表并手动填充映射。但是,有更有效的方法可以使用内置 Java 功能来执行此转换。

基于流的方法(Java 8 或更高版本)

使用 Java 8, Stream API 提供了一种将 List 转换为 Map 的简洁且高性能的方法。此方法利用 Collectors.toMap() 方法:

Map<Integer, String> map = 
    list.stream().collect(Collectors.toMap(Item::getKey, item -> item));

这里,Item::getKey lambda 函数检索列表中每个元素的键,而 item -> 则检索列表中每个元素的键。 item lambda 检索值。

使用循环的手动方法

对于 Java 8 之前的版本或如果流不适合,可以使用手动方法:

List<Object[]> results;
Map<Integer, String> resultsMap = new HashMap<>();
for (Object[] o : results) {
    resultsMap.put((Integer) o[0], (String) o[1]);
}

这种方法涉及迭代列表并手动提取键和值对,这可能比基于流的方法。

对非双射函数使用二元运算符

如果映射函数不是双射的(即多个值可以映射到同一个键) ),二元运算符可用于合并重复的键值。例如,如果我们要查找每个唯一键的值的总和:

Map<String, Integer> map = 
    intList.stream().collect(toMap(i -> String.valueOf(i % 3), 
                                   i -> i, 
                                   Integer::sum));

这里,二元运算符 Integer::sum 提供了合并重复键值的逻辑。

结论

虽然将 List 转换为 Map 的最佳方法取决于具体要求,但使用 Stream推荐使用 Collectors.toMap() 的 API,因为它的效率和简洁性。手动方法可以在旧版本的 Java 中或当流不适用时使用。

以上是如何高效地将Java列表转换为Map?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn