Java 覆盖 compareTo 方法以按字符串值对对象进行排序
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/24601604/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Overriding compareTo method in order to sort objects by String values
提问by Adam Staples
I have a class that implements the Comparable interface. In this class I need to override compareTo method in order to sort objects by String values.
我有一个实现 Comparable 接口的类。在这个类中,我需要覆盖 compareTo 方法以便按字符串值对对象进行排序。
If you scroll down to the bottom I'm attempting to make my method & I need to in the main method sort an array of Courses (using the compareTo method I'm making) by first Department type and then by course number, etc. but this requires comparing 2 strings.
如果您向下滚动到底部,我正在尝试创建我的方法,我需要在主方法中按第一个部门类型然后按课程编号等对课程数组(使用我正在制作的 compareTo 方法)进行排序。但这需要比较 2 个字符串。
import java.io.Serializable;
import java.io.*;
import java.util.*;
public class Course implements Comparable<Course>, Serializable {
private String prefix;
private int number;
private String Department;
private String grade;
/**
* Constructs the course with the specified information.
*
* @param prefix the prefix of the course designation
* @param number the number of the course designation
* @param Department the Department of the course
* @param grade the grade received for the course
*/
public Course(String prefix, int number, String Department, String grade)
{
this.prefix = prefix;
this.number = number;
this.Department = Department;
if (grade == null)
this.grade = "";
else
this.grade = grade;
}
/**
* Constructs the course with the specified information, with no grade
* established.
*
* @param prefix the prefix of the course designation
* @param number the number of the course designation
* @param Department the Department of the course
*/
public Course(String prefix, int number, String Department)
{
this(prefix, number, Department, "");
}
public String getPrefix()
{
return prefix;
}
/**
* Returns the number of the course designation.
*
* @return the number of the course designation
*/
public int getNumber()
{
return number;
}
/**
* Returns the Department of this course.
*
* @return the prefix of the course
*/
public String getDepartment()
{
return Department;
}
/**
* Returns the grade for this course.
*
* @return the grade for this course
*/
public String getGrade()
{
return grade;
}
/**
* Sets the grade for this course to the one specified.
*
* @param grade the new grade for the course
*/
public void setGrade(String grade)
{
this.grade = grade;
}
/**
* Returns true if this course has been taken (if a grade has been received).
*
* @return true if this course has been taken and false otherwise
*/
public boolean taken()
{
return !grade.equals("");
}
* Determines if this course is equal to the one specified, based on the
* course designation (prefix and number).
*
* @return true if this course is equal to the parameter
*/
public boolean equals(Object other)
{
boolean result = false;
if (other instanceof Course)
{
Course otherCourse = (Course) other;
if (prefix.equals(otherCourse.getPrefix()) &&
number == otherCourse.getNumber())
result = true;
}
return result;
}
The compareTo
function:
该compareTo
函数:
public int compareTo(Course o)
{
if(getDepartment().equals(o.getDepartment()))
{
return 0;
}
else if()
{
return -1;
}
else
{
return 1;
}
}
/**
* Creates and returns a string representation of this course.
*
* @return a string representation of the course
*/
public String toString()
{
String result = prefix + " " + number + ": " + Department;
if (!grade.equals(""))
result += " [" + grade + "]";
return result;
}
}
Main class thus far:
到目前为止的主要课程:
import java.util.*;
import java.lang.*;
import java.math.*;
import java.io.*;
import java.*;
public class StackCourse
{
public static void main(String[] args)
{
Course a = new Course("EEE", 230, "Engineering");
Course b = new Course("MAT", 150, "Liberal Arts");
Course c = new Course("PHY", 150, "Liberal Arts");
Course d = new Course("PHI", 304, "Liberal Arts");
Course e = new Course("ECN", 214, "W.P. Carey");
Course f = new Course("EEE", 120, "Engineering");
Course[] courses = {a,b,c,d,e,f};
for(int i=0; i<courses.length; i++)
System.out.println(courses[i].getDepartment());
}
}
采纳答案by Maheedhar Pamuru
public int compareTo(Course o)
{
if(getDepartment().compareTo(o.getDepartment()) ==0){
if(getNumber() < o.getNumber()) return -1;
else if(getNumber() > o.getNumber()) return 1;
else return 0;
}
return getDepartment().compareTo(o.getDepartment());
}
Output:
输出:
EEE 120: Engineering EEE 230: Engineering MAT 150: Liberal Arts PHY 150: Liberal Arts PHI 304: Liberal Arts ECN 214: W.P. Carey
EEE 120:工程 EEE 230:工程 MAT 150:文科 PHY 150:文科 PHI 304:文科 ECN 214:WP Carey
回答by Elliott Frisch
If I follow your question, I believe you wanted something like this
如果我按照你的问题,我相信你想要这样的东西
public int compareTo(Course o)
{
int a = getDepartment().compareTo(o.getDepartment());
if(a != 0)
{
return a;
}
return Integer.valueOf(getNumber()).compareTo(o.getNumber());
}
Note: You can return when the fields you are comparing aren't 0
, because those fields aren't equal.
注意:当您比较的0
字段不相等时,您可以返回,因为这些字段不相等。