我遇到了在Arraylist中排序对象的问题,因为我是排序对象的新手。
对arraylist进行排序是非常基本的,但是对对象的arraylist进行排序是完全不同的事情。基本上我已经在堆栈溢出中搜索代码,人们似乎使用比较器来解决他们的问题,但是他们没有解释如何实际调用该方法并将其投入使用,这就是我在这里的原因。
使用下面的代码,我试图用参数 - 字符串名称,int年龄和字符串课程对学生的arraylist进行排序。然后我有另一个类来存储Student对象并在类中对它们进行排序。这就是我所拥有的:
Student.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;
}
}
CompareObj.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进行排序?
答案 0 :(得分:8)
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());
}
});
答案 1 :(得分:1)
您的班级CompareObj
正在混合ArrayList
(通过encapuslation)和Comparator
(通过实现接口)。您不需要这样做,实施Comparator
就足够了。
尝试以下方法:
ArrayList<Strudent> students = new ArrayList<Student>();
// fill the ArrayList...
Collections.sort(students, new CompareObj());
这将按照student
课程中指定的名称对CompareObj
进行排序。
答案 2 :(得分:0)
您可以使用Arrays.sort()
方法
Arrays.sort(studentArray, new CompareObj ());
但是,如果您认为名称是一种自然订购学生的方式,那么请使用Student
类实现Comparable
接口并覆盖compareTo()
方法。
答案 3 :(得分:0)
对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);
}
}
答案 4 :(得分:0)
您可以为此使用数组排序算法。
//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));