示例我的列表为:
rollno name age add
01 abc 12 abc
02 pqr 13 srf
我想根据学生的名字对列表进行排序 如果名称相同,我必须根据年龄排序,如果年龄相同,我想根据滚动排序
public void sortData(List<Student> studentList) {
Student s1=null;
Student s2=null;
// Comparator<Student> StuNameComparator = new Comparator<Student>();
String StudentName1 = s1.getStudentName().toUpperCase();
String StudentName2 = s2.getStudentName().toUpperCase();
//ascending order
System.out.println(StudentName1.compareTo(StudentName2));
//descending order
//return StudentName2.compareTo(StudentName1);
}
答案 0 :(得分:1)
Java SE 8使这很简单,因为您可以定义3 Comparator并使用thenComparing
方法之一链接它们。
例如,像这样:
studentList.sort(Comparator.comparing(Student::getName,String.CASE_INSENSITIVE_ORDER).
thenComparingInt(Student::getAge).
thenComparing(Student::getRollNo));
您可能需要更改学生等的方法名称。
答案 1 :(得分:0)
您已经提出了同样的问题Here。那不是回答你的问题吗? 在提问之前请先做一些搜索。并且您应该使用相同的问题来进一步查询与该问题相关的问题。
作为概述,您可以使用以下参考代码: -
/**
* Adding students in ArrayList (rollNo, name, age)
*/
ArrayList<Student> students = new ArrayList();
Student s1 = new Student(1, "abc",12);
Student s2 = new Student(2,"def", 14);
Student s3 = new Student(3, "ghi", 15);
students.add(s1);
students.add(s2);
students.add(s3);
/**
* Comparator by Name
*/
public static Comparator<Student> getCompByName()
{
Comparator comp = new Comparator<Student>(){
@Override
public int compare(Student s1, Student s2)
{
return s1.name.compareTo(s2.name);
}
};
return comp;
}
/**
* Comparator by Age
*/
public static Comparator<Student> getCompByAge()
{
Comparator comp = new Comparator<Student>(){
@Override
public int compare(Student s1, Student s2)
{
return s1.age.compareTo(s2.age);
}
};
return comp;
}
/**
* Comparator by Roll No.
*/
public static Comparator<Student> getCompByRollNo()
{
Comparator comp = new Comparator<Student>(){
@Override
public int compare(Student s1, Student s2)
{
return s1.rollNo.compareTo(s2.rollNo);
}
};
return comp;
}
/**
* Comparison on basis of different criterias you can use
*/
Collections.sort(students, Student.getCompByName());
Collections.sort(students, Student.getCompByAge());
Collections.sort(students, Student.getCompByRollNo());
为了检查每个比较器后List是否相同,您可以使用: -
listA.containsAll(listB) && listB.containsAll(listA)
或者您可以使用Apache Common Utils isEqualCollection()
来比较2个列表,如: -
List<String> listA = Arrays.asList("a", "b", "b", "c");
List<String> listB = Arrays.asList("b", "c", "a", "b");
System.out.println(CollectionUtils.isEqualCollection(listA, listB)); // true
List<String> listC = Arrays.asList("a", "b", "c");
List<String> listD = Arrays.asList("a", "b", "c", "c");
System.out.println(CollectionUtils.isEqualCollection(listC, listD)); // false
您希望拥有的任何额外逻辑,在两者之间实现。