当前位置: 首页 > news >正文

List<Map<String, String>>最简单的遍历方式

使用增强for循环(最常用)

List<Map<String, String>> listOfMaps = getData(); // 获取数据for (Map<String, String> map : listOfMaps) {for (Map.Entry<String, String> entry : map.entrySet()) {String key = entry.getKey();String value = entry.getValue();System.out.println(key + ": " + value);}System.out.println("---"); // 分隔每个Map
}

使用传统的for循环

for (int i = 0; i < listOfMaps.size(); i++) {Map<String, String> map = listOfMaps.get(i);System.out.println("第 " + (i + 1) + " 个Map:");Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();while (iterator.hasNext()) {Map.Entry<String, String> entry = iterator.next();System.out.println(entry.getKey() + " = " + entry.getValue());}
}

使用forEach和Lambda表达式

listOfMaps.forEach(map -> {map.forEach((key, value) -> {System.out.println(key + " -> " + value);});System.out.println("----------");
});

使用Stream API

listOfMaps.stream().forEach(map -> {map.entrySet().stream().forEach(entry -> {System.out.println(entry.getKey() + ": " + entry.getValue());});});

使用AtomicInteger(线程安全)

AtomicInteger index = new AtomicInteger(1);
listOfMaps.forEach(map -> {System.out.println("Map " + index.getAndIncrement() + ":");map.forEach((key, value) -> System.out.println("  " + key + ": " + value));
});

使用IntStream

IntStream.range(0, listOfMaps.size()).forEach(i -> {Map<String, String> map = listOfMaps.get(i);System.out.println("索引 " + i + ":");map.forEach((key, value) -> System.out.println("  " + key + " = " + value));});

过滤特定键值对

listOfMaps.forEach(map -> {map.entrySet().stream().filter(entry -> entry.getKey().startsWith("user_")) // 过滤key.filter(entry -> !entry.getValue().isEmpty())        // 过滤空值.forEach(entry -> System.out.println(entry.getKey() + ": " + entry.getValue()));
});

查找特定数据

List<String> foundValues = listOfMaps.stream().flatMap(map -> map.values().stream()) // 扁平化所有值.filter(value -> value.contains("特定内容")).collect(Collectors.toList());

转换为其他数据结构

// 转换为List<String>(所有值)
List<String> allValues = listOfMaps.stream().flatMap(map -> map.values().stream()).collect(Collectors.toList());// 转换为Set<String>(所有键)
Set<String> allKeys = listOfMaps.stream().flatMap(map -> map.keySet().stream()).collect(Collectors.toSet());// 转换为单个Map(注意键冲突)
Map<String, String> combinedMap = listOfMaps.stream().flatMap(map -> map.entrySet().stream()).collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue,(oldValue, newValue) -> oldValue // 处理键冲突));

处理数据库查询结果

// 模拟数据库返回的List<Map<String, String>>
List<Map<String, String>> queryResults = getQueryResults();queryResults.forEach(row -> {String id = row.get("id");String name = row.get("name");String email = row.get("email");System.out.println("用户ID: " + id + ", 姓名: " + name + ", 邮箱: " + email);
});

处理JSON数据

List<Map<String, String>> jsonData = parseJsonData();// 提取特定字段并处理
jsonData.stream().filter(item -> "active".equals(item.get("status"))).forEach(item -> {String username = item.get("username");String role = item.get("role");sendNotification(username, role);});

数据统计和分析

// 统计每个键的出现次数
Map<String, Long> keyStatistics = listOfMaps.stream().flatMap(map -> map.keySet().stream()).collect(Collectors.groupingBy(key -> key, Collectors.counting()));// 统计值的分布
Map<String, Long> valueDistribution = listOfMaps.stream().flatMap(map -> map.values().stream()).collect(Collectors.groupingBy(value -> value, Collectors.counting()));

大数据量时的优化

// 使用并行流处理大数据量(注意线程安全)
listOfMaps.parallelStream().forEach(map -> {// 处理每个Map,确保操作是线程安全的processMap(map);});// 分批处理
int batchSize = 1000;
for (int i = 0; i < listOfMaps.size(); i += batchSize) {List<Map<String, String>> batch = listOfMaps.subList(i, Math.min(i + batchSize, listOfMaps.size()));processBatch(batch);
}

内存优化

// 使用迭代器避免创建临时对象
Iterator<Map<String, String>> listIterator = listOfMaps.iterator();
while (listIterator.hasNext()) {Map<String, String> map = listIterator.next();Iterator<Map.Entry<String, String>> mapIterator = map.entrySet().iterator();while (mapIterator.hasNext()) {Map.Entry<String, String> entry = mapIterator.next();// 处理每个键值对}
}

完整工具类示例

public class MapListUtils {/*** 遍历List<Map>并执行操作*/public static void forEach(List<Map<String, String>> list, BiConsumer<String, String> action) {list.forEach(map -> map.forEach(action));}/*** 提取所有特定键的值*/public static List<String> extractValues(List<Map<String, String>> list, String key) {return list.stream().map(map -> map.get(key)).filter(Objects::nonNull).collect(Collectors.toList());}/*** 查找包含特定值的Map*/public static List<Map<String, String>> findMapsContainingValue(List<Map<String, String>> list, String searchValue) {return list.stream().filter(map -> map.values().stream().anyMatch(value -> value.contains(searchValue))).collect(Collectors.toList());}
}// 使用示例
MapListUtils.forEach(dataList, (key, value) -> {System.out.println(key + ": " + value);
});List<String> allNames = MapListUtils.extractValues(dataList, "name");

总结

选择遍历方法时的考虑因素:

  1. 简单性:增强for循环最易读

  2. 功能性:Stream API提供丰富的操作

  3. 性能:大数据量时考虑并行流或分批处理

  4. 可维护性:复杂的处理逻辑可以封装到工具类中

根据具体需求选择最适合的遍历方式。

http://www.dtcms.com/a/354889.html

相关文章:

  • 在Ubuntu中安装配置MySql Server
  • [光学原理与应用-320]:光学产品不同阶段使用的工具软件、对应的输出文件
  • 计算机考研408《数据结构》真题模拟——数据结构与算法基本概念
  • DQN(深度Q网络):深度强化学习的里程碑式突破
  • Java 线程池拒绝策略
  • vscode pyqt5设置
  • 基于SpringBoot的老年人健康数据远程监控管理系统【2026最新】
  • JavaSE——八股文
  • 医院信息系统(HIS)的开发架构解析,代码示例
  • 面试tips--并发--进程与线程的区别线程通信方式总结
  • k8s集群1.20.9
  • 虚拟相机的最佳实践参考是什么
  • k8s是什么?
  • docker和k8s的区别
  • Android 开发 - 数据共享(数据共享、内容提供者实现、动态权限申请)
  • 面试记录7 c++软件开发工程师
  • Flask测试平台开发实战-第二篇
  • 面试之HashMap
  • 面试tips--JVM(3)--类加载过程
  • 【赵渝强老师】MySQL数据库的多实例环境
  • 前端Sentry数据分析与可视化:构建智能化监控仪表板
  • 大数据毕业设计选题推荐-基于大数据的痴呆症预测数据可视化分析系统-Spark-Hadoop-Bigdata
  • 重置 Windows Server 2019 管理员账户密码
  • 基于SamOut的音频Token序列生成模型训练指南
  • 【Rust】 3. 语句与表达式笔记
  • Flask测试平台开发实战-第一篇
  • 安科瑞三相智能安全配电装置在养老院配电系统中的应用
  • Flask测试平台开发,登陆重构
  • F010 Vue+Flask豆瓣图书推荐大数据可视化平台系统源码
  • 新型Zip Slip漏洞允许攻击者在解压过程中操纵ZIP文件