Как отсортировать следующее от самого высокого ранга до самого низкого

#java #firebase-realtime-database

#java #firebase-realtime-database

Вопрос:

Я пытаюсь понять, как использовать коллекции.сортировка и Collections.reverse и подумал, что у меня почти получилось, но иногда мой рейтинг не размещается в порядке от самого высокого до самого низкого… Я выполнил серию операторов if и теперь уверен, что это лучший способ, но у меня возникла какая-то странная проблема с порядком сортировки. Я попытался отредактировать свою базу данных, но она не сортирует ее должным образом….

 DatabaseReference reference = FirebaseDatabase.getInstance("https://medical-review-in-australia.firebaseio.com/")
  .getReference()
  .child("Medical Clinics")
  .child("Clinics"); // getReference() is the root  // can keep adding parents
  
 
reference.addValueEventListener(new ValueEventListener() {
    @SuppressLint("SetTextI18n")
    @RequiresApi(api = Build.VERSION_CODES.N)
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        list.clear();

        popular_clinic_ranking = new ArrayList<>();


        for (DataSnapshot snapshot : dataSnapshot.getChildren()) {

             popular_clinics = String.valueOf(snapshot.child("ranking").child("ranking").getValue());



             if (popular_clinics.equals("[Super Sleuth]")) {

                popular_clinics_name = String.valueOf(snapshot.child("Postal Information").child("name").getValue());
                popular_clinics_score = snapshot.child("Postal Information").child("total_Score").getValue(Integer.class);


               
        

             }   if (popular_clinics.equals("[Master Detective]")) {

                popular_clinics_name = String.valueOf(snapshot.child("Postal Information").child("name").getValue());
                popular_clinics_score = snapshot.child("Postal Information").child("total_Score").getValue(Integer.class);

          
          

            }   if (popular_clinics.equals("[Senior Detective]")) {

                popular_clinics_name = String.valueOf(snapshot.child("Postal Information").child("name").getValue());
                popular_clinics_score = snapshot.child("Postal Information").child("total_Score").getValue(Integer.class);


        String txt;
        txt = "Medical Clinic: "   popular_clinics_name   "nnTotal Score: "   popular_clinics_score   "nnRanking: "   popular_clinics;




            list.add(txt);
            Collections.sort(list);
            Collections.reverse(list);
            adapter.notifyDataSetChanged();  // need to use both Collections.sort and Collections.reveerse...

  

Пользовательский интерфейс приложения

Теперь я пытаюсь сохранить информацию в порядке ранжирования, и, похоже, это работает таким образом, но не все ранжирование вставляется в базу данных… Кроме того, почему count возвращает 4, когда у меня 3 медицинские клиники под двумя родителями? Считает ли он одного из моих родителей дочерним? Имеет ли значение, есть ли у меня заглавные буквы или строчные буквы при создании дочернего элемента? Я понял, что дочерний элемент должен быть в нижнем регистре, чтобы он работал как дочерний элемент?

  DatabaseReference reference = FirebaseDatabase.getInstance("https://medical-review-in-australia.firebaseio.com/").getReference().child("Medical Clinics").child("Clinics"); // getReference() is the root  // can keep adding parents
        reference.addValueEventListener(new ValueEventListener() {
            @SuppressLint("SetTextI18n")
            @RequiresApi(api = Build.VERSION_CODES.N)
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                list.clear();


                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {

                    popular_clinics = String.valueOf(snapshot.child("ranking").child("ranking").getValue());
                    count = (int) snapshot.getChildrenCount() - 1;
                   
                    for(int i = 0; i<= count; i  ) {

                        if (popular_clinics.equals("[Super Sleuth]")) {

                            popular_clinics_name = String.valueOf(snapshot.child("Postal Information").child("name").getValue());
                            popular_clinics_score = snapshot.child("Postal Information").child("total_Score").getValue(Integer.class);


                            HashMap<String, Object> map = new HashMap<>();
                            map.put("name", popular_clinics_name);
                            map.put("score", popular_clinics_score);
                            map.put("ranking", popular_clinics);

                            FirebaseDatabase.getInstance("https://medical-review-in-australia.firebaseio.com/").getReference().child("Medical Clinics").child("Popular Clinics").child("Super Sleuth").child("super sleuth").setValue(map);


                        }
  

Комментарии:

1. Какой язык вы используете

2. Привет! Я использую Java..

3. Я использую listview и читаю, что я должен использовать recycledview, правильно ли это?

Ответ №1:

проблема в том, что вы пытаетесь отсортировать числовые строковые значения. и у java есть глупая проблема с этим, например, если у вас есть эти значения в вашем списке:

«пункт 01» «пункт 02» «пункт 03» «пункт 10»

после сортировки порядок будет примерно таким:

«пункт 01» «пункт 10» «пункт 02» «пункт 03»

Таким образом, одним из чистых способов было бы сохранить ваши данные в классе, подобном so, возможно:

 public static class People {
    String name;
    int score;
    String ranking;

    public People(String name, int score, String ranking) {
        this.name = name;
        this.score = score;
        this.ranking = ranking;
    }
}
  

А затем создайте ArrayList таких людей:

 ArrayList<People> peopleInfo = new ArrayList<People>();
  

Затем добавьте свои данные в этот ArrayList, а затем отсортируйте их следующим образом:

 peopleInfo.sort(Comparator.comparing(info -> info.name));
  

Также обратите внимание, что этот тип сортировки чувствителен к регистру.

Комментарии:

1. но мои целые числа не являются строковыми, хотя я сортирую в соответствии с моим arraylist, который является строкой… оценки не должны иметь значения, но мой инспектор должен быть выше, чем Gumshoe

2. tring txt; txt = «Медицинская клиника: » popular_clinics_name «n Ntтотал Оценка: » popular_clinics_score «n nRanking: » popular_clinics; вот как вы добавляете свои значения, и я вижу popular_clinics_score в середине, что означает, что там есть число, преобразованное в строку

3. Итак, я предполагаю, что это невозможно сделать? и я не буду продолжать с этим

4. это можно сделать, и я дал вам ссылку на ответ в моем ответе. вы это проверили?

5. Я просто отредактировал свой ответ и предложил простое решение. проверьте это.