如何从List<Map<String,String>>中提取所有Map键存入字符串数组
从
List<Map<String, String>>集合中提取所有Map键存入字符串数组的实现方法 针对你给出的结构,有两种成熟的实现方案,分别适配不同Java版本:
方案1:Java 8+ Stream 简洁实现
利用Stream的flatMap方法打平所有Map的键集合,直接转换为目标字符串数组,支持按需选择是否去重:
List<Map<String, String>> ExcelData = new ArrayList<>(); Map<String,String> excelMap = new HashMap<>(); excelMap.put("Flower","lily"); excelMap.put("Fruit","banana"); ExcelData.add(excelMap); // 提取所有键 String[] allKeys = ExcelData.stream() .flatMap(itemMap -> itemMap.keySet().stream()) .distinct() // 可选配置:如果不同Map存在重复键,加这行自动去重,不需要就删除 .toArray(String[]::new);
方案2:兼容低版本Java的循环实现
如果使用Java 7及更早版本,直接通过双层遍历收集键即可,逻辑直观无额外依赖:
List<Map<String, String>> ExcelData = new ArrayList<>(); Map<String,String> excelMap = new HashMap<>(); excelMap.put("Flower","lily"); excelMap.put("Fruit","banana"); ExcelData.add(excelMap); // 收集键,用HashSet自动去重,不需要去重可以替换为ArrayList<String> Set<String> keyCollector = new HashSet<>(); for (Map<String, String> itemMap : ExcelData) { keyCollector.addAll(itemMap.keySet()); } // 转换为字符串数组 String[] allKeys = keyCollector.toArray(new String[0]);
注意事项
- 不需要去重时,把去重相关的
distinct()/HashSet替换为普通List存储即可,最终数组会保留所有重复出现的键 - 以上代码用你提供的测试数据运行,最终得到的数组内容为
["Flower", "Fruit"],符合预期
内容的提问来源于stack exchange,提问作者nithinc
相关产品推荐
相关产品推荐

