当前位置: 首页 > 知识库问答 >
问题:

重写compareTo方法以便按字符串值对对象进行排序

颜嘉誉
2023-03-14

我有一个实现可比较接口的类。在这个类中,我需要重写compareTo方法,以便按字符串值对对象进行排序。

如果你向下滚动到底部,我正在尝试我的方法

   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;
}

compare to功能:

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;
    }
}

迄今为止的主要类别:

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());       
    }
}

共有3个答案

邹俊友
2023-03-14

只需使用String的内置compareTo方法:

@Override
public int compareTo(Course o) {
    return this.Department.compareTo(o.Department);
}
督灿
2023-03-14

如果我理解你的问题,我相信你想要这样的东西

public int compareTo(Course o)
{
    int a = getDepartment().compareTo(o.getDepartment());
    if(a != 0)
    {
        return a;
    }
    return Integer.valueOf(getNumber()).compareTo(o.getNumber());
}

注意:当要比较的字段不是0时,可以返回,因为这些字段不相等。

邓令雪
2023-03-14
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());

}  

输出:

EEE 120:工程EEE 230:工程MAT 150:文科PHY 150:文科PHI 304:文科ECN 214:W. P. Carey

 类似资料:
  • 问题内容: 我有一个JavaScript对象数组: 如何按JavaScript中的值对它们进行排序? 我知道,但这似乎只适用于字符串和数字。我是否需要向对象添加方法? 问题答案: 编写自己的比较函数很容易: 或内联(c / o Marco Demaio):

  • 我有一个班的学生有以下领域: 字段“状态”可以有2个值:1。现在,2。缺席的 然后我有一个可观察的列表: 因此,我将学生存储在这个列表中。每个学生都有出席或缺席状态。 我需要按状态对这个观察列表进行排序。我希望目前状态的学生在该列表中名列第一。 有什么建议吗? 如果有任何帮助,我将不胜感激。

  • 问题内容: 我有一个包含多个数组的数组,我想根据这些数组中的某个字符串对数组进行排序。 如何按名称排序,以便 阿尔伯特排 在首位, 齐默尔曼排 在最后? 我知道如果可以使用整数进行排序,但是字符串使我毫无头绪,该怎么办。 谢谢您帮忙!:) 问题答案: 这可以通过将支持函数作为参数传递给方法调用来实现。 像这样:

  • 我有一个JavaScript对象数组: 如何在JavaScript中按照的值对它们进行排序? 我知道,但它似乎只适用于字符串和数字。是否需要向对象添加方法?

  • 问题内容: 如何按其字段之一(例如或)对对象数组进行排序? 问题答案: 使用usort,这是从手册改编而成的示例: 您还可以将任何callable用作第二个参数。这里有些例子: 使用匿名函数(来自PHP 5.3) 从班级内部 使用箭头函数(来自PHP 7.4) 另外,如果要比较数字值,则应使用“比较”功能。

  • 问题内容: 如果我有一个JavaScript对象,例如: 有没有一种方法可以基于值对属性进行排序?这样我最终 问题答案: 将它们移动到一个数组,对该数组进行排序,然后将其用于您的目的。这是一个解决方案: 拥有数组后,您可以按自己喜欢的顺序从数组中重建对象,从而完全实现了您打算要做的事情。在我所知道的所有浏览器中都可以使用,但这取决于实现的怪癖,并且可能随时中断。您永远不应假设JavaScript对