Java共有三种for循环方式:
- fori
- foreach
- Stream.foreach
fori
代码语言:javascript复制 for (int i = 0; i < arrayList.size(); i ) {
// dosomething
}
fori这种方式是Java最早的for循环方式,由于Java语法糖的不断完善,以及JDK 8的出现,是得此种方式大多数出现在教条的大学课本上,在实际的企业开发中用的较少,目前阿里巴巴的代码检测插件也会提示可以将fori的形式转换为foreach的形式。
foreach
代码语言:javascript复制for (String s : arrayList) {
// dosomething
}
即增强for循环,这种方式是第一种fori的语法糖,在编译后,对应的foreach便会自动转换为fori的形式。
Stream.foreach
代码语言:javascript复制arrayList.forEach(array -> {
// dosomething
});
此种方式是JDK 1.8之后随lambda表达式出现的for循环方式,代码更加简洁,并且可配合其他新特性使用更少的代码、以最简单的形式完成复杂操作,但是使用本方式要注意return
、break
并不能完成在前两者的目的。
代码测试
定义四个元素的List列表,当循环到值为hello1
时输出并返回。
List<String> arrayList = new ArrayList<String>();
arrayList.add("hello");
arrayList.add("hello1");
arrayList.add("hello2");
arrayList.add("hello3");
//① 使用fori的形式
for (int i = 0; i < arrayList.size(); i ) {
String s = arrayList.get(i);
System.out.println(s);
if (s.equals("hello1")) {
break;
}
}
for (int i = 0; i < arrayList.size(); i ) {
String s = arrayList.get(i);
System.out.println(s);
if (s.equals("hello1")) {
return;
}
}
//输出:
hello
hello1
for (String s : arrayList) {
System.out.println(s);
if (s.equals("hello1")) {
break;
}
}
//② 使用增强for循环的方式
for (String s : arrayList) {
System.out.println(s);
if (s.equals("hello1")) {
return;
}
}
//输出
hello
hello1
//③ 使用Stream.foreach的形式
arrayList.forEach(array -> {
System.out.println(array);
if (array.equals("hello1")) {
break;
}
});
arrayList.forEach(array -> {
System.out.println(array);
if (array.equals("hello1")) {
return;
}
});
//输出:
无输出,编译报错,在Stream.foreach中,无法使用break关键字.
List<String> list = Arrays.asList("123", "456", "789", "115");
list.forEach(element -> {
if (element.equals("456")) {
// 跳出本次循环
return;
}
System.out.println(element);
});
}
//输出:
123
789
115
break :跳出所在的当前整个循环,到循环外层代码继续执行 continue: 跳出本次循环,到下一个迭代循环 return : 直接返回方法,当前方法的后续代码将都不会被执行
注意:在Stream.foreach中,return的作用相当于普通for循环中的continue,即:跳出本次循环,进行下一次。