2016-03-25 16 views
0

Bu snippet'i var, çözüm test etmek için tek bir örnek board döndürmek istiyorum. Tek bir öğeyi döndürmek ve yineleyiciyi tüketmenin iyi bir yolu nedir?Tek bir öğe ile yinelenen bir arabirim gerçekleştirin

final List'u yerleştirmek ve daha sonra onu bir seçenek boşaltma?

public Iterable<Board> solution() { 
     return new Iterable<Board>() { 
      @Override 
      public Iterator<Board> iterator() { 
       return new Iterator<Board>() { 
        @Override 
        public boolean hasNext() { 
         return false; // change this 
        } 

        @Override 
        public Board next() { 
         return board; // This does not work 
        } 

        @Override 
        public void remove() { 

        } 
       }; 
      } 
    }; 
} 
+0

Bunu bir sınamada kullanmak istersiniz ve bu üretim kodu değil midir? – hotzst

+0

Evet, kesinlikle ve anlamak. –

cevap

5

herhangi Collection bir Iterable olduğunu, bu sadece biraz overthinking olabileceğini düşünüyorum, bu yüzden olduğunca basit bir şey yapabilirsiniz: @nickb tarafından verilen

public Iterable<Board> solution() { 
    return Collections.singleton(board); 
} 
+1

Collections.singleton() bu durumda muhtemelen daha iyi olurdu. – JustinKSU

+0

@JustinKSU - Yapmaya çalıştığınız şey konusunda çok daha açıklayıcıyım. Bunu düzenledim. Teşekkürler. – nickb

+0

[OP] Elbette, teşekkürler! Bu bir yaklaşım. Koleksiyonlara istemiyorsam, yinelemede singletonun yaptığı gibi bir şey yapmak zorunda kalacağım. Bu cevap bana bunun bir yolunu verdi. –

0

cevap görmek için bana yol Singleton yineleyiciyi nasıl uygular ve aşağıdaki yaklaşımla gelebilirim (öğrenme/test için). Üretim kodu için @ nickb'nin cevabını tercih edeceğim.

+0

Bunun, sıradaki tekrarlanan çağrılardaki yönetim nesnesini yine de döndürdüğünü unutmayın. Belki de hasNext zaten yanlış ise bir NoSuchElementException atma başka bir yan tümce sahip olmak istiyorum. Bir şey yapamayacaksanız, kaldırma yönteminin UnsupportedOperationException komutunu atması en iyisi olabilir. – user3745362

İlgili konular