考虑:

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循环语法为:

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

其他回答

public static Boolean Add_Tag(int totalsize)
{
    List<String> fullst = new ArrayList<String>();
    for(int k=0; k<totalsize; k++)
    {
        fullst.addAll();
    }
}

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

循环正常:

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版本(包括Java7),可以使用foreach循环,如下所示。

List<String> items = new ArrayList<>();
items.add("A");
items.add("B");
items.add("C");
items.add("D");
items.add("E");

for(String item : items) {
    System.out.println(item);
}

以下是Java8中使用for-each循环的最新方法(使用forEach+lambda表达式或方法引用循环List)。

Lambda公司

// Output: A,B,C,D,E
items.forEach(item->System.out.println(item));

方法参考

// Output: A,B,C,D,E
items.forEach(System.out::println);

有关详细信息,请参阅“Java 8 For Each examples”。

在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);

你可以在这里找到更多关于溪流的信息。

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