Java8 学习笔记 - List.forEach() 和 for(item : list) 的区别
Posted 笑虾
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java8 学习笔记 - List.forEach() 和 for(item : list) 的区别相关的知识,希望对你有一定的参考价值。
Iterable
接口定义了 default
方法 forEach
它的参数类型是个Consumer 函数接口
。
继承关系:
废话不多说直接上的源码:
public interface Iterable<T>
Iterator<T> iterator();
default void forEach(Consumer<? super T> action)
Objects.requireNonNull(action);
for (T t : this)
action.accept(t);
default Spliterator<T> spliterator()
return Spliterators.spliteratorUnknownSize(iterator(), 0);
既然是在 for(item : list)
上封装的,那 remove
的老问题还是一样的:异常。
@Test
public void testForEach()
List<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4));
numbers.forEach(i ->
if(i == 2)
numbers.remove(i); // java.util.ConcurrentModificationException
);
如果只是单纯的按条件 remove
元素,推荐来自 Collection
Java8 新增的默认方法removeIf
。
参数为一个 Predicate
就是一个作为过滤器的 lambda
它返回 boolean
。
List<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4));
numbers.removeIf(i -> i==2);
System.out.println(numbers); // [1, 3, 4]
参考资料
Interface Collection<E>
Interface Iterable<T>
以上是关于Java8 学习笔记 - List.forEach() 和 for(item : list) 的区别的主要内容,如果未能解决你的问题,请参考以下文章