首先,在本文中,我没有提出问题。我发布这个,因为我需要你方的建议。在Java中使用Comparable实现顺序机制(在mysql中)
我的Struts MVC我工作,这是我的要求: -
没有为类条目,其中用户添加,编辑一个页面,删除班的学生在一所大学。因此,在上述三个过程之后,当页面刷新时,表格中的数据应显示在页面区域的其余部分。该列表将显示SlNo。,课程名称,学期,类名,类代码等
我使用的是TO类显示在页面中现有的数据。此前,该列表根据课程名称排序[TO是Comparable类型,比较机制基于课程名称]。现在,他们要根据课程名称和学期数的排序,这意味着名单应该来像
- BA经济1
- BA经济2
- BA经济3
- BA经济4
- BA经济5
- BA经济6
- BA英语1
- BA英语2
- BA英语3
- BA英语4
- BA英语5
- BA英语6
所以最初我改变MySQL查询通过课程名称,学期给秩序。然后我更改了TO类,以便它没有内置的比较机制。代码工作正常。
但有些时候我有另一个想法后,我尝试使用可比接口,其中在comapreTo
方法我把哈希码两种课程名称和当前参考的学期,并加入它们来实现相同的机制,那么我采用comapreTo
方法的参数做了同样的事情,并且我将这两个答案的区别并将其返回。令人惊讶的是,它的工作,但我不知道这会在任何情况下工作。这是满足要求的好方法吗?这是编程的好方法吗?
示例代码: -
package com.sample;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
class Class implements Comparable<Class> {
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 Class(String name, int semester) {
super();
this.name = name;
this.semester = semester;
}
public int compareTo(Class 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<Class> classList = new ArrayList<Class>();
classList.add(new Class("BA English", 1));
classList.add(new Class("BA Economics", 3));
classList.add(new Class("BA Economics", 1));
classList.add(new Class("BA English", 6));
classList.add(new Class("BA English", 5));
classList.add(new Class("BA Economics", 2));
classList.add(new Class("BA Economics", 5));
classList.add(new Class("BA English", 4));
classList.add(new Class("BA Economics", 4));
classList.add(new Class("BA English", 3));
classList.add(new Class("BA Economics", 6));
classList.add(new Class("BA English", 2));
Collections.sort(classList);
Iterator<Class> it = classList.iterator();
while(it.hasNext()) {
Class c = it.next();
System.out.println(c.getName() + "---" + c.getSemester());
System.out.println();
}
}
}
你真的真的不应该命名'Class' – 2017-04-04 09:19:48
K,实际上在代码中它是类 –
请参阅http://stackoverflow.com/questions/369512/how-to-compare-objects-by-multiple-字段 – 2017-04-04 09:23:26