2017-01-02 15 views
0

Android用Realmを使用すると、一部のRealmオブジェクトに一意のIDのString[] objectIdsがあります。私はString[] objectIdsと同じ順序で対応するレルムオブジェクトを取得しようとしています。Realm Android "in"クエリソート

String[] objectIds = new String[]{"1", "10", "2", "3"}; 
RealmResults<MyRealmObject> myRealmObjects = realm.where(MyRealmObject.class).in("id", objectIds).findAll(); 

for(MyRealmObject obj: myRealmObjects) { 
    log(obj.id) //should print 1, 10, 2, 3 
} 

ただし、.findAll()を使用すると、結果を並べ替えるように見えます。 "in"を使用してオブジェクトのリストを取得し、objectIds配列と同じ順序を取得するにはどうすればよいですか?この問題にアプローチするにはよりよい方法がありますか?

つまり、リストの最初の結果MyRealmObject.id == 1、リストの2番目の結果などMyRealmObject.id == 10(objectIds配列の順序と同じ)にします。

+0

注文するための基準は何であるの最良の選択肢のような何かを行うことですか? –

+0

@TimCastelijns質問を少し更新しました。 "ObjectIds"配列内の文字列IDと同じ順序でRealm結果を欲しいです。だから、ID 1のIDが「MyRealmObject」、ID 10が2番目、ID 2が3番目など – DiscDev

+0

findAllSortedはうまくいくはずです。 –

答えて

1

あなたが望むことをするための簡単なクエリを書くことはできません。あなたがIDを持つオブジェクトが存在することが確実な場合、あなたはそれを少し簡略化することができ、もちろん

String[] objectIds = new String[]{"1", "10", "2", "3"}; 
RealmResults<MyRealmObject> myRealmObjects = realm.where(MyRealmObject.class).in("id", objectIds).findAll(); 
for (String id : objectIds) { 
    MyRealmObject obj = myRealmObjects.where().equalTo("id", id).findFirst(); 
    log(obj.id); 
} 

String[] objectIds = new String[]{"1", "10", "2", "3"}; 
for (String id : objectIds) { 
    MyRealmObject obj = realm.where(MyRealmObject.class).equalTo("id", id).findFirst(); 
    log(obj.id); 
} 
+0

私はすでに回避策として述べた2番目のアプローチを使用していますが、組み込みのレルム関数を使用してループを作成するのではなく、もっと簡単な方法があることを期待していました。私は何かがうまく来るまでこれを正解とマークします。 – DiscDev

+0

https://github.com/realm/realm-javaで問題/機能リクエストを作成することは大歓迎です。 – geisshirt

関連する問題