Можно ли изменить порядок в списке?

Когда я получаю свои данные из базы данных реального времени firebase, они автоматически перечисляются в порядке возрастания, но я пытаюсь получить значения, которые я помещаю в массив, чтобы они были перечислены в обратном порядке, а не в порядке возрастания.

Можно ли получить обратный порядок значений при работе со списком?
В настоящее время используется код:

    Query query = userRef.orderByChild("totalNumberOfSteps");
    ValueEventListener valueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot ds : dataSnapshot.getChildren()) {
                String username = ds.child("username").getValue(String.class);
                long totalNumberOfSteps = ds.child("totalNumberOfSteps").getValue(Long.class);
                Log.d(TAG , username + " - Steps: " + totalNumberOfSteps);
                arrayList.add(new String(username + "  -  " + "steps:  " + totalNumberOfSteps));

                arrayAdapter = new ArrayAdapter<>(Leaderboard.this , android.R.layout.simple_list_item_1 , arrayList);

                listView.setAdapter(arrayAdapter);
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Log.d(TAG , databaseError.getMessage()); //Don't ignore errors!
        }
    };
    query.addListenerForSingleValueEvent(valueEventListener);}}

Текущий вывод этого кода:

John Doe VI - Steps: 0
John Doe III - Steps: 0
John Doe V - Steps: 12
John Doe I - Steps: 79
John Doe IV - Steps: 88
John Doe II - Steps: 111

Предпочтительный выход:

John Doe II - Steps: 111
John Doe IV - Steps: 88
John Doe I - Steps: 79
John Doe V - Steps: 12
John Doe III - Steps: 0
John Doe VI - Steps: 0

При добавлении Collections.reverse(arrayList); к коду вывод:

John Doe II - Steps: 111
John Doe IV - Steps: 88
John Doe III - Steps: 0
John Doe VI - Steps: 0
John Doe V - Steps: 12
John Doe I - Steps: 79
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
245
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете отменить ArrayList, прежде чем предоставлять его ArrayAdapter, выполнив следующие действия:

Collections.reverse(arrayList);

В вашем случае скопируйте arrayList, прежде чем отменить его и передать конструктору ArrayAdapter:

ArrayList<> tmpArr = new ArrayList<>(arrayList);
Collections.reverse(tmpArr);
arrayAdapter = new ArrayAdapter<>(Leaderboard.this , android.R.layout.simple_list_item_1 , tmpArr );

В противном случае объект arrayList будет переворачиваться каждый раз, когда вызывается onDataChange(), и его порядок будет перепутан.

При добавлении Collections.reverse(arrayList); к моему коду он действительно меняет порядок, но не полностью, я отредактирую свой вопрос, чтобы вы могли видеть

Molinho 28.05.2019 20:07

Каков ваш результат при копировании ArrayList перед его изменением? ArrayList<> tmpArr = new ArrayList<>(arrayList); Collections.reverse(tmpArr); (используйте tmpArr для адаптера)

Lukas Schneider 28.05.2019 20:13

без добавления этой строки она находится в порядке возрастания, как показано в текущем выводе, указанном в вопросе.

Molinho 28.05.2019 20:14

Ok. Каков результат при использовании кода моего предыдущего комментария? (используйте tmpArr для ArrayAdapter)

Lukas Schneider 28.05.2019 20:18

Должен ли я с помощью tmpArr удалить текущий arrayAdapter, который используется? немного запутался на данный момент

Molinho 28.05.2019 20:22

Нет, просто попробуйте изменить последний аргумент конструктора arrayAdapter с arrayList на tmpArr вот так arrayAdapter = new ArrayAdapter<>(Leaderboard.this , android.R.layout.simple_list_item_1 , tmpArr);

Lukas Schneider 28.05.2019 20:26

Работает как шарм! Не могу выразить мою благодарность словами, ха-ха, большое спасибо!

Molinho 28.05.2019 20:28

Другие вопросы по теме