How can I use the java for each loop with custom classes?

JavaClassForeach

Java Problem Overview


I think most coders have used code like the following :


ArrayList<String> myStringList = getStringList();
for(String str : myStringList)
{
doSomethingWith(str);
}

How can I take advantage of the for each loop with my own classes? Is there an interface I should be implementing?

Java Solutions


Solution 1 - Java

You can implement Iterable.

Here's an example. It's not the best, as the object is its own iterator. However it should give you an idea as to what's going on.

Solution 2 - Java

The short version of for loop (T stands for my custom type):

for (T var : coll) {
    //body of the loop
}

is translated into:

for (Iterator<T> iter = coll.iterator(); iter.hasNext(); ) {
    T var = iter.next();
    //body of the loop
}

and the Iterator for my collection might look like this:

class MyCollection<T> implements Iterable<T> {

    public int size() { /*... */ }

    public T get(int i) { /*... */ }
    
    public Iterator<T> iterator() {
        return new MyIterator();
    }
    
    class MyIterator implements Iterator<T> {
    
        private int index = 0;
    
        public boolean hasNext() {
            return index < size();
        }
    
        public type next() {
            return get(index++);
        }
    
        public void remove() {
            throw new UnsupportedOperationException("not supported yet");
    
        }
   }
}

Solution 3 - Java

You have to implement the Iterable interface, that is to say, you have to implement the method

class MyClass implements Iterable<YourType>
{
Iterator<YourType> iterator()
  {
  return ...;//an iterator over your data
  }
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionGeoView Question on Stackoverflow
Solution 1 - JavaBrian AgnewView Answer on Stackoverflow
Solution 2 - JavaTombartView Answer on Stackoverflow
Solution 3 - JavaPierreView Answer on Stackoverflow