文章目录
forEach
Java
中的forEach
是一个用于迭代集合或流,且可以对迭代的每个元素进行特定操作的实用方法。
1. forEach method
下面的代码片段展示了forEach
方法在Iterable
接口中的默认实现,它使这个方法对除了Map
之外的所有集合都可用。
该方法对迭代器的每个元素执行给定的操作,直到处理完所有元素或操作引发异常为止。
该action
表示接受单个参数而不返回结果的一个操作。它是Consumer
接口的一个实例。
Iterable.java
default void forEach(Consumer<? super T> action) { Objects.requireNonNull(action); for (T t : this) { action.accept(t); } }
也可以使用以下这种简单语法创建自定义操作.这里把Object
类型替换为collection
或stream
中的元素类型.
Consumer<Object> action = new Consumer<Object>()
{
@Override
public void accept(Object t)
{
//perform action
}
};
2. Java 8 stream forEach example
用于迭代流的所有元素并执行特定操作的Java程序,这里的例子,我们打印所有的偶数
ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
Consumer<Integer> action = System.out::println;
list.stream().filter(n -> n % 2 == 0).forEach(action);
输出为:
2
4
3. Java forEach examle using List
用于迭代arrayList
中的所有元素并执行指定操作的java程序:
ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
Consumer<Integer> action = System.out::println;
list.forEach(action);
输出:
1
2
3
4
5
4. Java forEach example using Map
用于遍历HashMap
中的所有Entry
实体,并执行相关操作。我们可以迭代map
中的key
和value
并可以对所有元素进行任何操作.
HashMap<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
// 1.Map entries
Consumer<Map.Entry<String, Integer>> action = System.out::println;
map.entrySet().forEach(action);
// 2.Map keys
Consumer<String> actionKeys = System.out::println;
map.keySet().forEach(actionKeys);
// 3. Map values
Consumer<Integer> actionValues = System.out::println;
map.values().forEach(actionValues);
输出结果:
A=1
B=2
C=3
A
B
C
1
2
3
5. Create custom action(自定义操作)
我们也可以自定义操作方法为集合中的每个元素执行自定义逻辑。
HashMap<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
// 1.Map entries
Consumer<Map.Entry<String, Integer>> action = entry -> {
System.out.println("Key is " + entry.getKey());
System.out.println("Value is " + entry.getValue());
System.out.println();
};
map.entrySet().forEach(action);
输出结果:
Key is A
Value is 1
Key is B
Value is 2
Key is C
Value is 3