有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用对象参数对Arraylist中的对象进行排序

我在Arraylist中排序对象时遇到问题,因为我不熟悉排序对象

对arraylist进行排序是非常基本的,但对对象的arraylist进行排序则是完全不同的事情。基本上,我一直在研究堆栈溢出中的代码,人们似乎使用比较器来解决他们的问题,但他们没有解释如何实际调用该方法并将其投入使用,这就是我在这里的原因

通过下面的代码,我尝试使用参数对学生的arraylist进行排序-字符串名称、整数年龄和字符串课程。然后我有另一个类来存储学生对象,并在类中对它们进行排序。以下是我所拥有的:

学生。java

public class Student {

    private String name, course;
    private int age;

    public Student(String name, int age, String course) {
        this.name = name;
        this.age = age;
        this.course = course;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String getCourse() {
        return course;
    }
}

比较bj。java

import java.util.*;

public class CompareObj implements Comparator<Student>{

    private ArrayList<Student> sList;

    public CompareObj() {
        sList = new ArrayList<Student>();
    }

    @Override
    public int compare(Student s1, Student s2) {
         return s2.getName().compareTo(s1.getName());
    }

    public void add(Student s1) {
        sList.add(s1);
    }

    public void displayList() {
        for(int i = 0; i<sList.size();i++) {
            System.out.println(sList.get(i).getName());
        }
    }
}

在CompareObj类中,如何使用实现的方法compare(s1,s2),如何使用此方法对学生对象的arraylist进行排序


共 (5) 个答案

  1. # 1 楼答案

    您可以使用数组排序算法

    //Convert arraylist to array
    ZAATSAYIM[] a = jsonResultWrapper.sayimDTOs.toArray(
                    new ZAATSAYIM[jsonResultWrapper.sayimDTOs.size()]);
    
            //By date
            Date date1, date2;
    
            boolean sorted = false;
            ZAATSAYIM temp;
            while (!sorted) {
                sorted = true;
                for (int i = 0; i < a.length - 1; i++) {
    
                    date1 = a[i].getCDATETIMEDAte();
                    date2 = a[i + 1].getCDATETIMEDAte();
    
                    int diff = date2.compareTo(date1);
                    boolean after = (diff > 0);
                    boolean isSame = (diff == 0);
                    if (after) {
                        temp = a[i];
                        a[i] = a[i + 1];
                        a[i + 1] = temp;
                        sorted = false;
                    } else if (isSame && (a[i].getSignlaStregthInt() < a[i + 1].getSignlaStregthInt())) {
                        temp = a[i];
                        a[i] = a[i + 1];
                        a[i + 1] = temp;
                        sorted = false;
                    }
                }
            }
    
            jsonResultWrapper.sayimDTOs = new ArrayList<ZAATSAYIM>(Arrays.asList(a));
    
  2. # 2 楼答案

    对ArrayList中的元素进行排序的示例

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    
    public class ArrayListSorting {
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
    
        ArrayList al=new ArrayList<>();
        al.add("a");
        al.add("b");
        al.add("c");
        al.add("d");
        al.add("e");
    
        System.out.println("Before sorting");
        System.out.println(al);
        Collections.sort(al,new ArrayCustomizedSorting());
        System.out.println("After  sorting");
        System.out.println(al);
     }
    
    }
    
     class ArrayCustomizedSorting implements Comparator<String>{
    
      @Override
      public int compare(String o1, String o2) {
        // TODO Auto-generated method stub
        return -o1.compareTo(o2);
     }
    }
    
  3. # 3 楼答案

    您可以使用Arrays.sort()方法

    Arrays.sort(studentArray, new CompareObj ());
    

    然而,如果您认为名称是自然排序学生的一种方式,那么让您的Student类实现Comparable接口并重写compareTo()方法

  4. # 4 楼答案

    您的类CompareObj混合了ArrayList(通过封装)和Comparator(通过实现接口)。您不需要这样,实现Comparator就足够了

    请尝试以下操作:

    ArrayList<Strudent> students = new ArrayList<Student>();
    
    // fill the ArrayList...
    
    Collections.sort(students, new CompareObj());
    

    这将按照CompareObj类中指定的名称对student进行排序

  5. # 5 楼答案

    how can i use this method to sort my arraylist of student objects?
    

    你不需要自己打电话给compare()。您只需将比较器传递给Collections.sort(),它将通过调用compare()方法为您进行排序


    通过使用自定义类CompareObj

    Collections.sort(studentList, new CompareObj());
    

    或者没有CompareObj的另一种方式是

    Collections.sort(studentList,new Comparator<Student>() {
             @Override
            public int compare(Student s1, Student s2) {
                    return s1.getName().compareToIgnoreCase(s2.getName());
            }
        });