2016-03-25 14 views
0

解決策をテストするためにこのインスタンスを返す場合は、boardというインスタンスを返します。 1つのアイテムを返してIteratorを使い果す良い方法は何ですか?単一項目でIterableインターフェイスを実装する

final Listを置いてから唯一のオプションを空にしますか?

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

テストでこれを使用したいのですが、これは実動コードではありませんか? – hotzst

+0

はい、間違いなく理解できます。 –

答えて

5

は、私がどのCollectionIterableで、あなたはこの少しだけoverthinkingかもしれないと思うので、としてあなたに簡単な何かができる:@nickbで与え

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

Collections.singleton()はおそらくこの状況で良いでしょう。 – JustinKSU

+0

@JustinKSU - あなたが達成しようとしていることをはっきりと説明します。私はそれを編集しました。ありがとう。 – nickb

+0

[OP]もちろん、ありがとう!これが一つのアプローチです。私がコレクションにしたくなければ、反復するときシングルトンのような何かをしなければならないでしょう。この答えは私にそれを導きました。 –

0

答えは見に私を導きますどのようにシングルトンがイテレータを実装し、私は以下のアプローチを思いつくことができます(私の学習/テストのため)。 プロダクションコードについては、@ nickbの回答を優先します。

public Iterable<Board> solution() { 
    return new Iterable<Board>() { 
     /** 
     * Returns an iterator over a set of elements of type T. 
     * 
     * @return an Iterator. 
     */ 
     @Override 
     public Iterator<Board> iterator() { 

      return new Iterator<Board>() { 
       private boolean hasNext = true; 
       @Override 
       public boolean hasNext() { 
        return hasNext; 
       } 

       @Override 
       public Board next() { 
        if (hasNext) { 
         hasNext = false; 
        } 
        return board; 
       } 
       @Override 
       public void remove() { 

       } 
      }; 
     } 
    }; 
} 
+0

これは、nextへの繰り返し呼び出しでボードオブジェクトを返すことに注意してください。おそらく、hasNextがすでにfalseだった場合に、NoSuchElementExceptionをスローするelse節が必要です。あなたが何もしないようにするならば、removeメソッドがUnsupportedOperationExceptionをスローするようにするのが最善でしょう。 – user3745362

関連する問題