考虑:

List<String> someList = new ArrayList<String>();
// add "monkey", "donkey", "skeleton key" to someList
for (String item : someList) {
    System.out.println(item);
}

如果不使用for each语法,等价的for循环会是什么样子?


当前回答

在Java 8功能中,您可以使用以下功能:

List<String> messages = Arrays.asList("First", "Second", "Third");

void forTest(){
    messages.forEach(System.out::println);
}

输出

First
Second
Third

其他回答

这是一个等价的表达式。

for(Iterator<String> sit = someList.iterator(); sit.hasNext(); ) {
    System.out.println(sit.next());
}

使用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;

for (Iterator<String> itr = someList.iterator(); itr.hasNext(); ) {
   String item = itr.next();
   System.out.println(item);
}

它消除了所有基本的循环混乱,为代码增添了美感。它为您的代码提供了一个干净的外观,如下所示。

循环正常:

void cancelAll(Collection<TimerTask> list) {
    for (Iterator<TimerTask> i = list.iterator(); i.hasNext();)
         i.next().cancel();
}

用于每个:

void cancelAll(Collection<TimerTask> list) {
    for (TimerTask t : list)
        t.cancel();
}

for each是实现Iterator的集合上的构造。记住,您的集合应该实现Iterator;否则,不能将其用于每个。

以下行读作“for each TimerTask t in list”

for (TimerTask t : list)

每种情况下出现错误的可能性较小。您不必担心初始化迭代器或初始化循环计数器并终止它(在存在错误的地方)。

这里有一个答案,它不假定了解Java迭代器。它不太精确,但对教育有用。

在编程时,我们通常编写如下代码:

char[] grades = ....
for(int i = 0; i < grades.length; i++) {   // for i goes from 0 to grades.length
    System.out.print(grades[i]);           // Print grades[i]
}

foreach语法允许以更自然、更少语法噪音的方式编写这种常见模式。

for(char grade : grades) {   // foreach grade in grades
    System.out.print(grade); // print that grade
}

此外,此语法对于不支持数组索引但实现Java Iterable接口的Lists或Set等对象有效。