Сортировка результатов Java Realm в Java 7?

public class Leaderboard extends RealmObject {
    String score;
}

RealmResults<Leaderboard> leaderboardList = realm.where(Leaderboard.class).distinct("score").findAll();

Результатом является Strings, который на самом деле представляет собой просто большие числа, хранящиеся как String, поскольку Realm не поддерживает BigInteger. Что мне нужно сделать, так это вывести эти числа в числовом порядке.

Невозможно использовать Collections(sort), так как минимальный SDK равен 16. Не повезло и с использованием StreamSupport lib. В настоящее время я пытаюсь преобразовать RealmResults в простой массив строк, чтобы я мог выполнить сортировку, но у меня проблемы. Следующее приводит к ошибке приведения, но даже до того, как изменения приведут к тому, что ldrStrings.get(0) выведет что-то вроде proxy[((75000))], которое является реальным числом, но окружено этим текстом:

RealmResults<Leaderboard> leaderboardList =
realm.where(Leaderboard.class).distinct("score").findAll();

    Leaderboard[] leaderboardArray = (Leaderboard[]) leaderboardList.toArray();

    List<String> ldrStrings = new ArrayList(leaderboardArray.length);
    for (Object object : leaderboardArray) {
        ldrStrings.add(object != null ? object.toString() : null);
    }

    Collections.sort(ldrStrings, new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            BigInteger bi1 = new BigInteger(o1);
            BigInteger bi2 = new BigInteger(o2);
            return bi1.compareTo(bi2);
        }
    });

person zngb    schedule 30.05.2018    source источник
comment
о скольких объектах идет речь? вам, скорее всего, потребуется загрузить таблицу Leaderboard, чтобы это сработало.   -  person EpicPandaForce    schedule 30.05.2018
comment
Только один объект Score в таблице лидеров. Повторяется только 5 раз (показаны 5 лучших результатов)   -  person zngb    schedule 30.05.2018


Ответы (1)


Для потомков: эта проблема слишком продумана. Вот решение, которое берет список RealmResults, итерирует результаты в массив строк, преобразует строку в BigInteger и сортирует их от наибольшего к наименьшему.

     RealmResults<Leaderboard> leaderboardList = realm.where(Leaderboard.class).distinct("score").findAll();
        List<String> strings = new ArrayList<>();
        for(int i = 0; i < leaderboardList.size(); i++) {
            strings.add(leaderboardList.get(i).getScore());
        }

        Collections.sort(strings, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                BigInteger bi1 = new BigInteger(o1);
                BigInteger bi2 = new BigInteger(o2);
                return bi2.compareTo(bi1);
            }
        });
person zngb    schedule 30.05.2018