代码之家  ›  专栏  ›  技术社区  ›  Geo

如何为每个循环使用Java类和自定义类?

  •  44
  • Geo  · 技术社区  · 16 年前

    我认为大多数编码人员使用的代码如下:

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

    如何利用我自己的类的for-each循环?我应该实现一个接口吗?

    3 回复  |  直到 10 年前
        1
  •  51
  •   Brian Agnew    16 年前

    你可以实现 Iterable .

    这里有一个 example .它不是最好的,因为对象是它自己的迭代器。不过,它应该能让你知道发生了什么。

        2
  •  10
  •   Ilya Serbis    10 年前

    for循环的简短版本( T 代表我的自定义类型):

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

    翻译成:

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

    我的集合的迭代器可能如下所示:

    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");
    
            }
       }
    }
    
        3
  •  7
  •   Pierre    16 年前

    你必须实现ITerable interface 也就是说,您必须实现该方法

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