1. 概述
本文将演示如何使用纯Java和Guava库将Map的值转换为Array、List或Set。这些都是日常开发中高频操作,掌握后能显著提升编码效率。
✅ 核心要点:
- 所有转换均可单行完成
- 兼容Java标准库和Guava两种实现
- 代码示例可直接用于生产环境
2. Map值转Array
使用纯Java实现Map值转数组:
@Test
public void givenUsingCoreJava_whenMapValuesConvertedToArray_thenCorrect() {
Map<Integer, String> sourceMap = createMap();
Collection<String> values = sourceMap.values();
String[] targetArray = values.toArray(new String[0]);
}
⚠️ 重点注意:
- 优先使用
toArray(new T[0])
而非toArray(new T[size])
- 前者性能更优(参考Aleksey Shipilëv的基准测试)
- 且能避免潜在的类型安全问题
3. Map值转List
3.1 纯Java实现
@Test
public void givenUsingCoreJava_whenMapValuesConvertedToList_thenCorrect() {
Map<Integer, String> sourceMap = createMap();
List<String> targetList = new ArrayList<>(sourceMap.values());
}
3.2 Guava实现
@Test
public void givenUsingGuava_whenMapValuesConvertedToList_thenCorrect() {
Map<Integer, String> sourceMap = createMap();
List<String> targetList = Lists.newArrayList(sourceMap.values());
}
✅ 对比建议:
- 纯Java方案:零依赖,适合基础项目
- Guava方案:代码更简洁,适合已引入Guava的项目
4. Map值转Set
使用纯Java实现Map值转Set:
@Test
public void givenUsingCoreJava_whenMapValuesConvertedToSet_thenCorrect() {
Map<Integer, String> sourceMap = createMap();
Set<String> targetSet = new HashSet<>(sourceMap.values());
}
❌ 常见误区:
- 直接使用
sourceMap.values()
返回的是Collection,不是Set - 需显式构造HashSet/TreeSet等具体实现类
5. 总结
所有转换操作的核心技巧:
- 通过
map.values()
获取值集合 - 利用目标类型的构造器或工厂方法完成转换
- 优先选择零依赖的纯Java方案
📌 完整示例代码见GitHub项目(Maven项目,可直接导入运行)