遍历一个List集合有几种写法? list.forEach(System.out::print);这种写法表示什么意思?
首先我们定义一个集合,放几个元素进去
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
1、普通正常for循环的遍历方式
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i));
}
System.out.println(1);
2、增强for循环
为了简化for循环,我们使用增强for循环,也是常见的遍历方式
for (String s : list) {
System.out.print(s);
}
System.out.println(2);
3、迭代器Iterator
除了以上两种方式,我们还有一种可以使用迭代器,在Set集合里使用的比较多,迭代器Iterator
Iterator<String> it = list.iterator();
while (it.hasNext()){
System.out.print(it.next());
}
System.out.println(3);
4、Stream流 基于匿名内部类
在jdk8版本以后,我们可以通过Stream的方式,里面提供了一个forEach方法去遍历
里面有一个参数Consumer接口
jdk8后抽象出了四个接口
a、Predicate 断言 test
给一个参数,判断是否正确
b、Supplier 供应 get
给一个东西,得到一个对象,通常来讲就是我们产生对象的一个方法
c、Consumer 消费 accept
给一个东西,负责处理一件事情,没有返回值
d、Function 函数 apply
给一个参数,得到一个结果,处理完返回值
Stream stream1 = list.stream();
stream1.forEach(new Consumer() {
@Override
public void accept(Object o) {
System.out.print(o);
}
});
System.out.println(4);
5、Stream流 基于lambda
Stream stream2 = list.stream();
stream2.forEach(o -> {System.out.print(o);});
System.out.println(5);
6、Stream流 基于lambda,只有一行代码
Stream stream3 = list.stream();
stream3.forEach(o -> System.out.print(o));
System.out.println(6);
7、Stream流 基于lambda,只有一行代码,且引入了别的方法
Stream stream4 = list.stream();
stream4.forEach(System.out::print);
System.out.println(7);
8、使用list集合的forEach方法
list.forEach(System.out::print);
System.out.println(8);