我希望对包含属性名称和课程的学生对象列表进行排序,以便根据名称进行排序,如果两个名称相同则应该考虑排序过程...我可以单独进行但需要单个列表... PLZ帮助...
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package studentlist;
import java.util.*;
/**
*
* @author Administrator
*/
public class StudentList {
/**
* @param args the command line arguments
*/
String name, course;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCourse() {
return course;
}
public void setCourse(String course) {
this.course = course;
}
public StudentList(String name, String course) {
this.name = name;
this.course = course;
}
public static void main(String[] args) {
// TODO code application logic here
List<StudentList> list = new ArrayList<StudentList>();
list.add(new StudentList("Shaggy", "mca"));
list.add(new StudentList("Roger", "mba"));
list.add(new StudentList("Roger", "bba"));
list.add(new StudentList("Tommy", "ca"));
list.add(new StudentList("Tammy", "bca"));
Collections.sort(list, new NameComparator());
Iterator ir = list.iterator();
while (ir.hasNext()) {
StudentList s = (StudentList) ir.next();
System.out.println(s.name + " " + s.course);
}
System.out.println("\n\n\n ");
Collections.sort(list, new CourseComparator());
Iterator ir1 = list.iterator();
while (ir1.hasNext()) {
StudentList s = (StudentList) ir1.next();
System.out.println(s.name + " " + s.course);
}
}
}
class NameComparator implements Comparator<StudentList> {
public int compare(StudentList s1, StudentList s2) {
return s1.name.compareTo(s2.name);
}
}
class CourseComparator implements Comparator<StudentList> {
public int compare(StudentList s1, StudentList s2) {
return s1.course.compareTo(s2.course);
}
}
答案 0 :(得分:6)
您只需将比较放在一个 Comparator 中。
name
是否相等:
name
的比较结果。 courses
:跟随比较器会起作用:
class NameCourseComparator implements Comparator<StudentList> {
public int compare(StudentList s1, StudentList s2) {
if (s1.name.equals(s2.name)) {
return s1.course.compareTo(s2.course);
}
return s1.name.compareTo(s2.name);
}
}
答案 1 :(得分:3)
一个简单的方法:
首先根据名称对列表进行排序。之后再循环遍历列表。如果您按顺序找到任何相同的名称,则比较课程并相应地更新列表。
答案 2 :(得分:0)
您可以稍微调整一下NameComparator
class NameComparator implements Comparator<StudentList> {
public int compare(StudentList s1, StudentList s2) {
if(s1.getName().equals(s2.getName()) {
return s1.getCourse().compareToIgnoreCase(s2.getCourse());
}else {
return s1.getName().compareToIgnoreCase(s2.getName());
}
}