PoSet で見つかった一連の数値を反復処理するカスタム イテレータ クラスを作成しました。これが私のコードです。
private class IntGenerator implements Iterator {
private Iterator<Integer> i;
private Set<Integer> returnedNumbers;
public IntGenerator () {
returnedNumbers = new HashSet<Integer> ();
i = S.iterator();
}
public boolean hasNext() {
return i.hasNext();
}
public Object next() {
int n = i.next();
for (Pair p : R) {
if (isInSecondElmPair(p, n)) {
if (returnedNumbers.contains(p.getFirstElm())) {
returnedNumbers.add(n);
return n;
}else{
returnedNumbers.add(p.getFirstElm());
return p.getFirstElm();
}
}else if (isInFirstElmPair(p, n)){
returnedNumbers.add(n);
return n;
}
}
return n;
}
public void remove() {
throw new UnsupportedOperationException();
}
}
問題は、数値を返すときは、半順序規則に従う必要があるということです。つまり、1. (x, y) が に属しているR
場合、x は y の前に返される必要があります。
ただし、上記のコードはその順序に従っているように見えますが、重複を作成しています。コードを修正して許可しないようにするにはどうすればよいですか?
注: 私のコードでは、S は PoSet 内の数値のセットであり、それは HashSet であり、R は PoSet 内の関係を保持するためのペア (ペア: 2 つの int をパラメーターとして受け取るクラス) の配列リストです。
この問題を解決する方法はありますか? ありがとう