首先,在这篇文章中,我没有提出问题。我发布此信息是因为我需要您的建议。
我在Struts MVC工作,这是我的要求: -
有一个类入口页面,用户可以在该页面中为学生添加,编辑和删除课程。因此,在上述三个过程之后,当刷新页面时,表中存在的数据应显示在页面区域的其余部分中。该列表将显示 SlNo。,课程名称,学期,班级名称,班级代码等等。
我使用 TO 类来显示页面中的现有数据。之前,列表是根据课程名称[ TO 是可比较类型,比较机制基于课程名称]进行排序的。现在他们想要根据课程名称和学期编号进行排序,这意味着列表应该是
所以最初我改变了mysql查询,以顺序课程名称,学期。然后我更改了 TO 类,以便它没有内置的比较机制。代码工作正常。
但是经过一段时间我得到了另一个想法,我尝试使用Comparable接口实现相同的机制,在comapreTo
方法中,我采用了课程名称和学期的哈希码当前引用并添加它们,然后我用comapreTo
方法的参数引用做了同样的事情,我把两个答案区别开来并返回它。令人惊讶的是它有效,但我不确定这是否适用于所有情况。这是满足要求的好方法吗?这是一种很好的编程方式吗?
示例代码: -
package com.sample;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
class Classes implements Comparable<Classes> {
private String name;
private int semester;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSemester() {
return semester;
}
public void setSemester(int semester) {
this.semester = semester;
}
public Classes(String name, int semester) {
super();
this.name = name;
this.semester = semester;
}
public int compareTo(Classes other) {
return (this.name.hashCode() + new Integer(this.semester).hashCode()) -
(other.name.hashCode() + new Integer(other.semester).hashCode());
}
}
public class ComparableMultipleAttributes {
public static void main(String[] args) {
List<Classes> classList = new ArrayList<Classes>();
classList.add(new Classes("BA English", 1));
classList.add(new Classes("BA Economics", 3));
classList.add(new Classes("BA Economics", 1));
classList.add(new Classes("BA English", 6));
classList.add(new Classes("BA English", 5));
classList.add(new Classes("BA Economics", 2));
classList.add(new Classes("BA Economics", 5));
classList.add(new Classes("BA English", 4));
classList.add(new Classes("BA Economics", 4));
classList.add(new Classes("BA English", 3));
classList.add(new Classes("BA Economics", 6));
classList.add(new Classes("BA English", 2));
Collections.sort(classList);
Iterator<Classes> it = classList.iterator();
while(it.hasNext()) {
Classes c = it.next();
System.out.println(c.getName() + "---" + c.getSemester());
System.out.println();
}
}
}
答案 0 :(得分:1)
除了你得到的好评之外,如果确实希望比较器按多个属性排序,那么使用jdk-8很容易实现:
Comparator.comparing(Classes::getName)
.thenComparing(Classes::getSemester)
... other properties