Java中是否有while each循环?

6
如果有这样一个东西,我想它的语法应该是类似于以下内容的。
while(Integer item : group<Integer>; item > 5)
{
    //do something
}

请问是否有类似的东西或者模仿这个的方法?

5个回答

8
不,最接近的是:
for (Integer item : group<Integer>)
{
    if (item <= 5)
    {
        break;
    }
    //do something
}

当然,如果Java有简洁的闭包,编写类似于.NET的Enumerable.TakeWhile方法来包装可迭代对象(在这种情况下是group),并使其在条件不再成立时提前结束,这将是合理的。
当然,现在也可以做到这一点,但代码会很丑陋。参考C#代码如下:
foreach (int item in group.TakeWhile(x => x > 5))
{
    // do something
}

也许 Java 在某个时候会拥有漂亮的闭包...

呵呵,你又比我快几秒钟了。顺便说一下,我觉得你在代码片段的第一行打算使用“for”而不是“while”。 - Brandon E Taylor
哦,我不认识那种 while 语法。 - ojrac

3
for(Integer item : group<Integer>)
{
    if (item <= 5)
         break;
    //do something
}

这是我所能想到的。


我的建议完全一样,只是你的条件好像反了。 - Jon Skeet
1
现在没问题了 - 最初是 "if (item > 5)" - Jon Skeet
1
他自问自答只用了4分钟? :P - WowtaH
2
我可以想出大多数事情的做法,但我仍在疑惑是否这是最佳方式。如果有一个 while each 循环会更好。我认为我应该让投票决定我解决问题的方式是否可行。 - Bobby

3

作为参考,Jon Skeet在Java中的第二个答案,对于一些接口Predicate,看起来会像这样:

for (int item : takeWhile(group, new Predicate<Integer>() {
    public boolean contains(Integer x) {
        return x > 5;
    }
}) {
    // do something
}

问题在于语法,而不是语义。


谢谢,我一直在想这个问题,那种语法确实很糟糕。 - Bobby

0

在Java中,没有像while-each这样的东西,但我们有for-each,它非常棒。


0
在Java中,while是基于条件的。你要找的是foreach结构。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接