Reputation: 1283
I created a realm object(VolleyballPlayer) according to other realm objects. Female object includes all Volleyball objects but Male object has some Volleyball objects.
I want to create VolleyballPlayer object that group Female and Male objects for gender. But I couldn't find how to do it according to RealmResults.
My realm objects:
public class Volleyball extends RealmObject {
private int round;
// ... Generated getters and setters ...
}
//...All females play volleyball.
public class Female extends RealmObject {
private Volleyball volleyball;
private int clasp;
// ... Generated getters and setters ...
}
public class Male extends RealmObject {
private Volleyball volleyball;
private int belt;
// ... Generated getters and setters ...
}
New object:
public class VolleyballPlayer extends RealmObject {
private Volleyball volleyball;
private String gender;
// ... Generated getters and setters ...
}
I have allFemale and allMale realmResults but I haven't take allPlayer realmResults.
RealmResults<Female> allFemales = mRealm.where(Female.class).findAll();
RealmResults<Male> allMales = mRealm.where(Male.class).findAll();
All female students play volleyball and how can I extract male players from through all the players(in females) who play volleyball? Is there a way in the realm that I write below code:
public void setAllVolleyballPlayers(Realm mRealm) {
Realm mRealm = getRealm();
mRealm.beginTransaction();
addAllMalePlayers(mRealm);
addAllFemalePlayers(mRealm);
mRealm.commitTransaction();
}
private void addAllMalePlayers(Realm mRealm) {
RealmResults<Male> allMalePlayers = new MalePlayersQueries().getAllMales(mRealm);
mRealm.beginTransaction();
if (allMalePlayers != null && allMalePlayers.size() > 0) {
VolleyballPlayer volleyballPlayer = mRealm.createObject(VolleyballPlayer.class);
volleyballPlayer.setGender(getString(R.string.male));
for (Male male : allMales) {
VolleyballPlayer volleyballPlayer =
mRealm.createObject(VolleyballPlayer.class);
volleyballPlayer.setVolleyball(male.getVolleyball());
}
}
}
private void addAllFemalePlayers(Realm mRealm) {
RealmResults<Female> allFemales = new FemaleQueries().getAllPlayers(mRealm);
VolleyballPlayer volleyballPlayer = mRealm.createObject(VolleyballPlayer.class);
volleyballPlayer.setGender(getString(R.string.female));
////// All female students play volleyball and how can I extract male players from all the players(in females) who play this volleyball and get females
}
And I want to show at the end of table:
**Volleyball Players**
**Female**
Emma
Olivia
Sophia
**Male**
John
Jame
Upvotes: 0
Views: 485
Reputation: 81539
Personally I'd leverage the power of "single-table-inheritance using discriminator field" for this.
public class Volleyball extends RealmObject {
private int round;
@LinkingObjects("volleyball")
private final RealmResults<VolleyBallPlayer> playedBy = null;
// ... Generated getters and setters ...
}
public class VolleyBallPlayer extends RealmObject {
private Volleyball volleyball;
@Index
private String gender;
private int femaleClasp; // 0, or with Integer `null` if male
private int maleBelt; // 0, or with Integer `null` if female
// ... Generated getters and setters ...
}
Now you can do
RealmResults<VolleyBallPlayer> femalePlayers = realm.where(VolleyBallPlayer.class)
.equalTo("gender", Gender.FEMALE.name()).findAll();
RealmResults<VolleyBallPlayer> malePlayers = realm.where(VolleyBallPlayer.class)
.equalTo("gender", Gender.MALE.name()).findAll();
And even
RealmResults<Volleyball> maleVolleyballs = realm.where(Volleyball.class)
.equalTo("playedBy.gender", Gender.MALE.name()).findAll();
Upvotes: 2