考虑:
List<String> someList = new ArrayList<String>();
// add "monkey", "donkey", "skeleton key" to someList
for (String item : someList) {
System.out.println(item);
}
如果不使用for each语法,等价的for循环会是什么样子?
考虑:
List<String> someList = new ArrayList<String>();
// add "monkey", "donkey", "skeleton key" to someList
for (String item : someList) {
System.out.println(item);
}
如果不使用for each语法,等价的for循环会是什么样子?
当前回答
使用forEach:
int[] numbers = {1,2,3,4,5};
Arrays.stream(numbers).forEach(System.out::println);
答复:
1
2
3
4
5
The process finished with exit code 0
PS:您需要一个Array(int[]数字),然后导入java.util.Arrays;
其他回答
foreach循环语法为:
for (type obj:array) {...}
例子:
String[] s = {"Java", "Coffe", "Is", "Cool"};
for (String str:s /*s is the array*/) {
System.out.println(str);
}
输出:
Java
Coffe
Is
Cool
警告:可以使用foreach循环访问数组元素,但不能初始化它们。为此使用原始for循环。
警告:必须将数组的类型与其他对象匹配。
for (double b:s) // Invalid-double is not String
如果要编辑元素,请使用原始for循环,如下所示:
for (int i = 0; i < s.length-1 /*-1 because of the 0 index */; i++) {
if (i==1) //1 because once again I say the 0 index
s[i]="2 is cool";
else
s[i] = "hello";
}
现在,如果我们将数据转储到控制台,我们会得到:
hello
2 is cool
hello
hello
Java中的for each循环使用底层迭代器机制。因此,它与以下内容相同:
Iterator<String> iterator = someList.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
System.out.println(item);
}
代码应为:
import java.util.ArrayList;
import java.util.List;
public class ForLoopDemo {
public static void main(String[] args) {
List<String> someList = new ArrayList<String>();
someList.add("monkey");
someList.add("donkey");
someList.add("skeleton key");
// Iteration using For Each loop
System.out.println("Iteration using a For Each loop:");
for (String item : someList) {
System.out.println(item);
}
// Iteration using a normal For loop
System.out.println("\nIteration using normal For loop: ");
for (int index = 0; index < someList.size(); index++) {
System.out.println(someList.get(index));
}
}
}
在Java 8之前,您需要使用以下功能:
Iterator<String> iterator = someList.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
System.out.println(item);
}
然而,通过在Java8中引入Streams,您可以用更少的语法完成同样的任务。例如,对于someList,您可以执行以下操作:
someList.stream().forEach(System.out::println);
你可以在这里找到更多关于溪流的信息。
for (Iterator<String> i = someIterable.iterator(); i.hasNext();) {
String item = i.next();
System.out.println(item);
}
注意,如果需要使用i.remove();在循环中,或者以某种方式访问实际的迭代器,不能使用for(:)习惯用法,因为实际的迭代器只是推断出来的。
正如Denis Bueno所指出的,这段代码适用于实现Iterable接口的任何对象。
此外,如果for(:)习惯用法的右侧是数组而不是Iterable对象,则内部代码使用int索引计数器并检查array.length。请参阅Java语言规范。