2015-10-30 2 views
0

Я пытаюсь сортировать конечные времена проекта от наименьших до наибольших значений.Сортировка массива пользовательского объекта в Java

Я создал список пользовательских объектов, называемых Project, и пытаюсь их сортировать на основе значения, возвращаемого аксессуаром. Я перегрузил функцию сравнения, и я получать ошибку:

The method sort(List, Comparator) in the type Collections is not applicable for the arguments (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; 
} 
+0

Вы можете просто использовать 'возвращения project1.getEndTime() - project2.getEndTime() '... но в чем вопрос? – MadProgrammer

+0

[Это] (http://stackoverflow.com/questions/3699141/how-to-sort-an-array-of-ints-using-a-custom-comparator) может быть полезно – TheLostMind

+3

'не применимо для аргументов (Project [], новый Comparator() {}) 'Я уверен, что ваш ответ прямо там. 'Project []' - это массив, а не список. – markspace

ответ

3

Collections.sort operates on a List, and Arrays.sort operates on an array

Необходимость изменения 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); 
0

Вы никогда не вернетесь -1 (например, <). Однако я бы предложил использовать Integer.compareTo(int, int), который возвращает значение 0, если x == y; значение меньше 0, если x < y; а значение больше 0, если х> у как

public static int compareProjects(Project project1, Project project2) { 
    return Integer.compare(project1.getEndTime(), project2.getEndTime()); 
} 

Кроме того, поскольку projectList является массивом Project вы можете получить его в качестве List<Project> с Arrays.asList(T...) как

Collections.sort(Arrays.asList(projectList), 
Смежные вопросы