一、总述
这种方式是得益于JDK8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式。
它利用的是 forEach() 就可以遍历了。
二、代码示例
//1.创建集合并添加元素
Collection<String> coll = new ArrayList<>();
coll.add("zhangsan");
coll.add("lisi");
coll.add("wangwu");
我们先使用匿名内部类的形式来进行遍历,然后再改成Lambda表达式。
首先来看看 forEach() 的形参 Consumer 是什么,由于我们现在使用的是多态的方式创建对象,因此在看源码的时候,需要去选择它的实现类。
选中 forEach(),然后右键 Go To ——> implementation(s)。
然后选中 ArrayList 即可。
然后选择形参 Comsumer ctrl + b
此时就发现了,它是一个接口,并且这个接口上加上了 @FunctionalInterface,表示它是一个函数式接口。
coll.forEach(new Consumer<String>() {
@Override
// 这里的 s 依次表示集合中的每一个数据
public void accept(String s) {
// 因此如果我们需要对遍历出的数据进行一些操作,直接操作 s 就行了
System.out.println(s);
}
});
接下来,我们来看一下 forEach() 的底层源码,我们在查看 forEach() 源码的时候,只需要看下面选中的两行就行了。
这一行 int i = 0; i < size; i++,这一行就相当于一个 普通for 在遍历集合,因此这个 i 依次表示集合中的每一个索引,通过索引就可以将集合中每一个元素获取到,下面的 elemetAt(es, i) 就是通过索引获取到集合里面的每一个元素。
然后将元素交给 accept() 方法去进行处理,这个方法就是我们刚刚自己写的 accept()。
接下来将匿名内部类转化为Lambda表达式就行了。
//lambda表达式
coll.forEach(s -> System.out.println(s));
三、总结
1、Collection是单列集合的顶层接口,在这个接口中所有的方法都被 List 和 Set 系列集合共享。
2、常见成员方法
add、clear、remove、contains、isEmpty、size
3、三种同样的遍历方式
- 迭代器:在遍历的过程中需要删除元素,请使用迭代器
- 如果在遍历的过程中不需要删除,仅仅只想遍历,那么使用
增强for或Lambda表达式
1526

被折叠的 条评论
为什么被折叠?



