128 votes

Android-java- Comment trier une liste d'objets par une certaine valeur à l'intérieur de l'objet ?

J'essaie de trier un tableau d'objets par une valeur particulière dans l'objet. Quelle serait la meilleure approche pour faire une telle chose. Devrais-je utiliser Collections.sort() avec une sorte de comparateur ?

J'essaie de trier une liste d'objets par une valeur flottante qu'ils détiennent dans une des variables.

EDIT : Voici ce que j'ai pour l'instant :

public class CustomComparator implements Comparator<Marker> {
    @Override
    public int compare(Mark o1, Mark o2) {
        return o1.getDistance().compareTo(o2.getDistance());
    }
}

les états d'erreur : Impossible d'invoquer compareTo(double) sur le type primitif double.

Est-ce parce qu'un comparateur ne peut pas retourner autre chose qu'un certain type ?

2voto

Ankit Sharma Points 146

Vous pouvez comparer deux chaînes en utilisant ceci.

Collections.sort(contactsList, new Comparator<ContactsData>() {

                    @Override
                    public int compare(ContactsData lhs, ContactsData rhs) {

                        char l = Character.toUpperCase(lhs.name.charAt(0));

                        if (l < 'A' || l > 'Z')

                            l += 'Z';

                        char r = Character.toUpperCase(rhs.name.charAt(0));

                        if (r < 'A' || r > 'Z')

                            r += 'Z';

                        String s1 = l + lhs.name.substring(1);

                        String s2 = r + rhs.name.substring(1);

                        return s1.compareTo(s2);

                    }

                });

Et maintenant, créez une classe ContactData.

public class ContactsData {

public String name;
public String id;
public String email;
public String avatar; 
public String connection_type;
public String thumb;
public String small;
public String first_name;
public String last_name;
public String no_of_user;
public int grpIndex;

public ContactsData(String name, String id, String email, String avatar, String connection_type)
{
    this.name = name;
    this.id = id;
    this.email = email;
    this.avatar = avatar;
    this.connection_type = connection_type;

}
}

Ici, la liste des contacts est :

public static ArrayList<ContactsData> contactsList = new ArrayList<ContactsData>();

2voto

KishanSolanki124 Points 966

Pour Kotlin vous pouvez utiliser cette fonction

fun sortList(list: List<YourCustomPOJOClass?>) {

    //descending
    Collections.sort(
        list
    ) { o1, o2 -> Integer.valueOf(o1!!.intValueXYZ!!).compareTo(o2!!.intValueXYZ!!) }

//    //ascending
//    Collections.sort(
//        list
//    ) { o1, o2 -> Integer.valueOf(o2!!.intValueXYZ!!).compareTo(o1!!.intValueXYZ!!) }
}

et l'appeler simplement dans votre activity ou fragment par

sortList(list)

1voto

Heiko Rupp Points 15153

"Android-java" n'est ici en aucun cas différent de "java normal", donc oui Collections.sort() serait une bonne approche.

1voto

Ketan Mehta Points 272
public class DateComparator implements Comparator<Marker> {
    @Override
    public int compare(Mark lhs, Mark rhs) {
        Double distance = Double.valueOf(lhs.getDistance());
        Double distance1 = Double.valueOf(rhs.getDistance());
        if (distance.compareTo(distance1) < 0) {
            return -1;
        } else if (distance.compareTo(distance1) > 0) {
            return 1;
        } else {
            return 0;
        }
    }
}

ArrayList(Marker) arraylist;

Comment l'utiliser :

Collections.sort(arraylist, new DateComparator());

1voto

Ammar Points 43

Classe de modèle de personne

 class Person {
        int id;
        String name;
        String fatherName;

        public Person(int id, String name, String fatherName) {
            this.id = id;
            this.name = name;
            this.fatherName = fatherName;
        }

    }

Triage

class SORT_BY_ID implements Comparator<Person> {
        public int compare(Person a, Person b)
        {
            return a.id - b.id;
        }
    }

Utilisation

 ArrayList<Person> personArrayList = new ArrayList<Person>();
            personArrayList.add(new Person(111, "bb", "oakla"));
            personArrayList.add(new Person(131, "aa", "fast"));
            personArrayList.add(new Person(121, "cccc", "paokla"));

            System.out.println("Before Sorted Array list of PErson");
            for (int i=0; i<personArrayList.size(); i++)
                System.out.println(personArrayList.get(i));

            Collections.sort(personArrayList, new SORT_BY_ID());

            System.out.println("After Sorted ");
            for (int i=0; i<personArrayList.size(); i++)
                System.out.println(personArrayList.get(i));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X