2017-04-04 13 views
0

首先,在本文中,我没有提出问题。我发布这个,因为我需要你方的建议。在Java中使用Comparable实现顺序机制(在mysql中)

我的Struts MVC我工作,这是我的要求: -

没有为类条目,其中用户添加,编辑一个页面,删除班的学生在一所大学。因此,在上述三个过程之后,当页面刷新时,表格中的数据应显示在页面区域的其余部分。该列表将显示SlNo。课程名称学期类名类代码

我使用的是TO类显示在页面中现有的数据。此前,该列表根据课程名称排序[TO是Comparable类型,比较机制基于课程名称]。现在,他们要根据课程名称和学期数的排序,这意味着名单应该来像

  1. BA经济1
  2. BA经济2
  3. BA经济3
  4. BA经济4
  5. BA经济5
  6. BA经济6
  7. BA英语1
  8. BA英语2
  9. BA英语3
  10. BA英语4
  11. BA英语5
  12. 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(); 
     } 
    } 
} 
+0

你真的真的不应该命名'Class' – 2017-04-04 09:19:48

+0

K,实际上在代码中它是类 –

+0

请参阅http://stackoverflow.com/questions/369512/how-to-compare-objects-by-multiple-字段 – 2017-04-04 09:23:26

回答

1

除此之外你得到了很好的意见,如果你真的要比较的多个属性进行排序,然后使用JDK-8是很容易实现:

 Comparator.comparing(Classes::getName) 
     .thenComparing(Classes::getSemester) 
     ... other properties 
相关问题