在Java中如何使用forEach遍历集合_集合遍历操作解析

答案:Java 8引入的forEach结合Lambda可简化集合遍历,支持List、Set及Map的键值对操作,语法为collection.forEach(元素 -> 操作),如names.forEach(System.out::println);Map可通过entrySet遍历,ages.forEach((k,v)->...);可与Stream的filter联用实现条件处理,如numbers.stream().filter(n->n%2==0).forEach(System.out::println);支持方法引用如people.forEach(Person::printInfo);但禁止在forEach中修改集合结构以避免ConcurrentModificationException。

在Java中,forEach 是一种简洁高效的遍历集合的方式,尤其从Java 8引入函数式编程特性后,使用 forEach 结合 Lambda 表达式可以大大简化代码。它不仅适用于 ListSet 等集合类型,也可以用于 Map 的键值对遍历。

forEach 基本语法与使用场景

forEachIterable 接口中的默认方法,所有实现该接口的集合类都可以调用。其基本语法如下:

collection.forEach(元素 -> 处理操作);

例如,遍历一个字符串列表并打印每个元素:

List names = Arrays.asList("Alice", "Bob", "Charlie");
names.forEach(name -> System.out.println(name));

还可以直接引用方法,使代码更简洁:

names.forEach(System.out::println);

遍历 Map 的多种方式

Map 不直接实现 Iterable,但可以通过 entrySet()keySet()values() 获取可迭代视图。

遍历键值对示例:

Map ages = new HashMap();
ages.put("Alice", 25);
ages.put("Bob", 30);

ages.forEach((key, value) -> System.out.println(key + ": " + value));

这种方式比传统的 for 循环更加直观,也避免了手动获取迭代器的繁琐过程。

结合条件处理与方法引用

在实际开发中,常需要对集合元素进行过滤或处理。forEach 虽不支持过滤(那是 Stream 的职责),但可以配合 filter 使用:

List numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream()
.filter(n -> n % 2 == 0)
.forEach(System.out::println);

这样只输出偶数。如果只是简单遍历无需过滤,直接使用 forEach 更高效。

对于自定义对象,可以调用其方法:

List people = ...;
people.forEach(Person::printInfo);

基本上就这些。掌握 forEach 的用法能让集合遍历更清晰、易读,尤其是在配合 Lambda 和方法引用时。注意不要在 forEach 中修改集合结构(如添加/删除元素),否则可能引发 ConcurrentModificationException。合理使用,效果显著。