Java Realm Результаты сортировки в Java 7? - PullRequest
0 голосов
/ 30 мая 2018
public class Leaderboard extends RealmObject {
    String score;
}

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

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

Невозможно использовать Collections(sort), так как min 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);
        }
    });

1 Ответ

0 голосов
/ 30 мая 2018

Для потомков: эта проблема слишком продумана.Вот решение, которое принимает список 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);
            }
        });
...