Is there a such thing as a while each loop in Java?
-
21-08-2019 - |
Question
If there were such a thing I would imagine the syntax to be something along the lines of
while(Integer item : group<Integer>; item > 5)
{
//do something
}
Just wondering if there was something like this or a way to imitate this?
Solution
No, the closest would be:
for (Integer item : group<Integer>)
{
if (item <= 5)
{
break;
}
//do something
}
Of course if Java ever gets concise closures, it would be reasonable to write something like .NET's Enumerable.TakeWhile
method to wrap the iterable (group
in this case) and make it finish early if the condition stops holding.
That's doable even now of course, but the code to do it would be ugly. For reference, the C# would look like this:
foreach (int item in group.TakeWhile(x => x > 5))
{
// do something
}
Maybe Java will get nice closures some time...
OTHER TIPS
for(Integer item : group<Integer>)
{
if (item <= 5)
break;
//do something
}
This is what I can think of.
For reference, Jon Skeet's second answer in Java would currently, for some interface Predicate
, look something like:
for (int item : takeWhile(group, new Predicate<Integer>() {
public boolean contains(Integer x) {
return x > 5;
}
}) {
// do something
}
It's the syntax that sucks, not the semantics.
In Java while
is condition based. What you are looking for is the foreach
construct.
There is no such thing like while-each in Java but we've got for -each which is so great.