【问题标题】:Sorting Array of Custom Object in JavaJava中自定义对象的排序数组
【发布时间】:2015-10-30 13:00:08
【问题描述】:

我正在尝试将项目结束时间从最小值到最大值排序。

我创建了一个名为 Project 的自定义对象列表,并尝试根据访问器返回的值对它们进行排序。我重载了比较函数并收到错误:

Collections 类型中的方法 sort(List, Comparator) 不适用于参数 (Project[], new Comparator(){})

我的主要代码如下所示,感谢所有帮助。

Collections.sort(projectList, new Comparator< Project>(){

    @Override
    public int compare(Project project1, Project project2)
    {   
       return compareProjects(project1, project2);}
    }
);

public static int compareProjects(Project project1, Project project2)
{ 
    if (project1.getEndTime() > project2.getEndTime())
        return 1;
    else
        return 0;
}

和我的项目类:

public Project(int projectNum, int start, int end)
{
    this.projectNum = projectNum;
    this.start = start;
    this.end = end;
    this.length = end - start;
}

public static int getEndTime()
{
    return end;
}

【问题讨论】:

  • 你可以只使用return project1.getEndTime() - project2.getEndTime() ...但问题是什么?
  • This 可能会有所帮助
  • is not applicable for the arguments (Project[], new Comparator(){}) 我很确定你的答案就在那里。 Project[] 是一个数组,而不是一个列表。

标签: java comparison


【解决方案1】:

Collections.sort 对 List 进行操作,Arrays.sort 对数组进行操作

需要更改Project.class,实现Comparable interface

class Project implements Comparable<Project> {

    @Override
    public int compareTo(Project o) {
        if (this.getEndTime() > o.getEndTime())
        return 1;
    else
        return 0;
    }
}

然后在你的main.class

Arrays.sort(projectList);

【讨论】:

    【解决方案2】:

    你永远不会返回-1(例如&lt;)。但是,我建议您使用 Integer.compareTo(int, int) 如果 x == y 则返回值 0;如果 x y like

    则值大于 0
    public static int compareProjects(Project project1, Project project2) {
        return Integer.compare(project1.getEndTime(), project2.getEndTime());
    }
    

    另外,由于projectListProject 的数组,因此您可以将其作为List&lt;Project&gt;Arrays.asList(T...) 类似

    Collections.sort(Arrays.asList(projectList),
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多