Java8新特性:集合遍历forEach方法

前言

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来实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值