第二の機能と同等になります何それは少し奇妙に思える:私は私の変換である、ここで次の変換
struct Point : IEnumerable<Point>{
public int X;
public int Y;
IEnumerator<Point> IEnumerable<Point>.GetEnumerator()
{
Point point = new Point();
for (point.Y = 0; point.Y < Y; ++point.Y)
for (point.X = 0; point.X < X; ++point.X)
yield return point;
}
IEnumerator IEnumerable.GetEnumerator()
{
return ((IEnumerable<Point>)this).GetEnumerator();
}}
を行う方法を見つけ出すことができませんPoint自体が実装され、Point型のIterableが使用されます。 Pointの1つのインスタンス(特定のPointオブジェクトは通常、他の点について多くのことを知っている必要はありません...)では、コレクションを行うことがあるかもしれません。あなたはguavaのPeekingIteratorを使うことができます。あなたがMavenで作業している場合、以下の依存関係がきちんとあなたに伝えられます。そうでなければ、JARが必要です。
<!-- https://mvnrepository.com/artifact/com.google.guava/guava-jdk5 -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava-jdk5</artifactId>
<version>17.0</version>
</dependency>
あなたはそれを持っていたら、ここで を使用することは非常に複雑ではありませんが実例である(と私はあなたの第二の機能に関連する部分を実装しています):
public class Point implements Iterable<Point> {
// Additional code here
private Iterator<Point> pointIterator;
public Point (Iterator<Point> pointIterator) {
this.pointIterator = pointIterator;
}
@Override
public Iterator<Point> iterator() {
return pointIterator;
}
PeekingIterator<Point> getEnumerator() {
if (pointIterator instanceof PeekingIterator) {
return (PeekingIterator<Point>)pointIterator;
} else {
return null;
}
}
public static void main(String[] args) {
Point myPoint = new Point(new PeekingIteratorMock());
PeekingIterator<Point> myIterator = myPoint.getEnumerator();
Point p;
while ((p = myIterator.next()) != null) {
// Do something usefull here
}
}
}
PeekingIteratorですインタフェースを提供していますので、実用的なテストケースが必要な場合は具体的な実装に渡す必要があります。私はそれをあなたが完了するために実装されていないままにしておきました。
public class PeekingIteratorMock implements PeekingIterator<Point> {
@Override
public boolean hasNext() {
// TODO Auto-generated method stub
return false;
}
@Override
public Point next() {
// TODO Auto-generated method stub
return null;
}
@Override
public Point peek() {
// TODO Auto-generated method stub
return null;
}
@Override
public void remove() {
// TODO Auto-generated method stub
}
}
あなたがコメントで投票すれば、それは本当に役に立ちます。ありがとう – naveed