对具有不同属性的java对象数组进行排序

utugiqy6  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(349)

我有一个对象数组,每个对象包含两个字段。我必须编写一个方法,按照第一个字段对数组进行排序。我已经有了从每个对象中提取第一个字段的方法
当我调用我的方法进行排序时,总是收到一条错误消息。
这是我的密码:

public static void trier(String[]code, String[]nom, int nbObj) {
    for(int i = 0; i < nbObj-1; i++) {
        int indMin = i;
        for (int j = i+1; j < nbObj; j++)
            if (code[j].compareTo(code[indMin]) < 0)
                indMin = j;
        if (indMin != i) {
            // permutation :
            String tempo = code[i];
            code[i] = code[indMin];
            code[indMin] = tempo;

            // permutation :
            String temp = nom[i];
            nom[i] = nom[indMin];
            nom[indMin] = temp;
        }
    }
}

电话:

Classe.trier(tableau, tableau, nbObj);

我也试过了 Class.sort(array.getCode(), array.getName(), nbStudent); 但我仍然有编译错误
事先谢谢你的帮助

zf2sa74q

zf2sa74q1#

首先,您不必使用两个单独的数组来包含数据。您可以将所有内容放在单个数组中,但更好的方法是使用java集合。最佳选择是arraylist。但是,最好将两个字段合并为一个对象。你可以这样做:

public class MyObject {
    String code;
    String nom;

    MyObject(String code, String nom) {
        this.code = code;
        this.nom = nom;
    }
}

现在有了一个包含2个字段的类。您的目标是按第二个字段(nom)对这些对象的集合进行排序。由于java 8:

public static void sort1(ArrayList<MyObject> list) {
    list.sort((obj1, obj2) -> obj1.nom.compareTo(obj2.nom));
}

public static void sort2(ArrayList<MyObject> list) {
    list.sort(Comparator.comparing(MyObject::getNom));
} // However for this you need to add method getNom to MyObject

记住要把你的物品正确地放在收藏中。例如:

MyObject a = new MyObject("abc", "abide");
MyObject b = new MyObject("cab", "whatever you want");

ArrayList<MyObject> list = new ArrayList<>();
list.add(a);
list.add(b);
trier(list);

相关问题