概述
前言
Java8给所有的集合都添加了一个新的方法forEach,该方法遍历集合中的元素并为每个元素执行指定的动作。
注意,这里说的是集合的forEach方法,方法是在接口Iterable中的。而不是流Stream中的forEach方法,这两个特别容易混淆,两个方法的功能类似,但是使用场景有所区别。
下面这个就是集合的Iterable接口和Map接口中的forEach方法,它有一个默认实现,子类无需实现这个方法,集合对象可以直接调用forEach方法。
public interface Iterable<T> {
// 只列出此方法
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
}
public interface Map<K, V> {
// 只列出此方法
default void forEach(BiConsumer<? super K, ? super V> action) {
Objects.requireNonNull(action);
for (Map.Entry<K, V> entry : entrySet()) {
K k;
V v;
try {
k = entry.getKey();
v = entry.getValue();
} catch (IllegalStateException ise) {
// this usually means the entry is no longer in the map.
throw new ConcurrentModificationException(ise);
}
action.accept(k, v);
}
}
}
下面这个是Stream流中的forEach方法,是个抽象方法,由子类实现。
public interface Stream<T> extends BaseStream<T, Stream<T>> {
// 只列出此方法
void forEach(Consumer<? super T> action);
}
正文
在forEach方法出现之前,遍历集合要使用for循环,或者Iterable对象,比较复杂。Java8之后,可以直接调用forEach方法,使用Lambda表达式简化语法,如果对Lambda表达式不了解,请看本人博客:Java8新特性:Lambda表达式与函数式编程。
default void forEach(Consumer<? super T> action)
该方法对Iterable中的每个元素执行指定的操作(action),直到处理完所有元素或操作抛出异常为止。下面举一个List和Map集合遍历元素并执行指定action的例子。
public static void main(String[] args) {
Arrays.asList("hi", "hello", "sawadika").forEach((a) -> System.out.println(a));
Map<String, Integer> map = new HashMap<>();
map.put("Hi", 1);
map.put("Hello", 2);
map.put("你好", 3);
map.forEach((k, v) -> {
System.out.println(k + ":" + v);
});
}
总结
集合的forEach方法提供了非常便利的循环集合的方式,它利用了Java8的新特性Lambda来实现。
最后
以上就是风中画板为你收集整理的Java8新特性:集合遍历forEach方法的全部内容,希望文章能够帮你解决Java8新特性:集合遍历forEach方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复