特定の順序 (ID フィールドに基づいて昇順または降順) でソートされたメソッドに 2 つのリストが入っています。
両方のリストをツリーセットに投入して、目的の結果を達成できるようにするカスタム コンパレータの実装があります。
私の問題は、ツリーセットがロードされた後です。メソッドから単一のリストを返す必要があります。私の最初の実装は順序付けを気にしなかったので、これを行いました (複合は私の名前付き TreeSet です):
composite.addAll(custom);
composite.addAll(reference);
Iterator<MyObject> anIter = composite.iterator();
ArrayList<MyObject> returnVal = new ArrayList<MyObject>();
while(anIter.hasNext())
returnVal.add(anIter.next());
これを実行すると、「custom」と「reference」の 2 つのリストがデフォルトの順序に戻ります。Collection の iterator() メソッド状態の Javadocs は、リストを昇順で返します。これが私の問題の原因である可能性があります。
それで...元のリストの順序を保護しながら TreeSet の内容を返す方法はありませんか? ツリーセットが頭に浮かんだのは、2 つのコレクションに対してコンパレーター インターフェイスの力を利用して、addAll() でそれらを結合し、重複を排除したかったからです。
注文を保護するための提案をいただければ幸いです。
編集*
Set<MyObject> composite = new TreeSet<MyObject>(new Comparator<MyObject>(){
@Override
public int compare(MyObject arg0, MyObject arg1) {
int arg0ID = arg0.getObjID();
int arg1ID = arg1.getObjID();
if(arg0ID < arg1ID) return -1;
else if(arg0ID> arg1ID) return 1;
else return 0;
}
});