2013-02-19 5 views
2

Я работаю над модулем отчета, который показывает время и количество задач. Значения устанавливаются в Java Bean, а объект bean-объекта хранится в массиве. Я использую отдельные запросы для получения времени и количества задач. Теперь мне приходится сортировать массив на основе времени и количества задач. Код ниже сравнивает только строки:Сортировка массива объектов в Java

if (!list.isEmpty()) { 
    Collections.sort(list, new Comparator<Project>() { 
     @Override 
     public int compare(Project p1, Project p2) { 

      return p1.getName().compare(p2.getName()); 
     } 
     }); 
    } 

У меня есть проблемы в сортировке целого значения свойства в JavaBean, который хранится в array.Any помощи высоко оценил.

+0

Вы привязывания для сортировки целочисленного массива, вы можете использовать 'Arrays.sort (ИНТ [] а)' – Shivam

+0

Так что массив выглядит? – Jason

+0

'Integer' и' Date' оба также имеют метод compareTo, вы не можете их использовать? – sp00m

ответ

5

В комментариях ниже вопрос вы говорите, у вас есть:

Project[] array = new Project[3]; 

Если бы я тебя, я бы объявить Project, как

public class Project implements Comparable<Project> { 

    @Override 
    public int compareTo(Project other) { 
     return this.id - other.id; // or whatever property you want to sort 
    } 

Затем вы можете отсортировать свой массив, просто позвонив

Arrays.sort(array); 

Если вы не хотите, чтобы ваш класс реализует интерфейс Comparable вы можете передать компаратор Arrays.sort():

Arrays.sort(array, new Comparator<Project>() { 
     @Override 
     public int compare(Project o1, Project o2) { 
      return o1.id - o2.id; // or whatever property you want to sort 
     } 
    }); 

Я использовал анонимный один, вы можете также извлечь его своим собственным классом, если это необходимо в другом месте.

+0

Именно то, что я искал ... Спасибо jlordo за отличную помощь. – santhosh

0

Как о чем-то вроде:

Project[] project = ..initialise array; 

List<Project> projectList = Arrays.asList(project); 
Collections.sort(projectList, new Comparator<Project>() { 
    @Override 
    public int compare(Project p1, Project p2) { 
     if(p1.getIntProperty() == p2.getIntProperty()) return 0; 
     return p1.getIntProperty() > p2.getIntProperty() ? 1 : -1; 
    } 
    }); 
} 
+1

что происходит, если два значения равны? – Jason

+2

И что, если оба значения равны? Вы никогда не возвращаете '0'. –

+0

Как насчет равенства? –

0

попробовать это для сортировки чисел

return(p1.getIntProperty() - p2.getIntProperty()); 
0

вы смотрите в компаратор и Сопоставимые интерфейсов в Java и сделал. Вы можете использовать метод compare() для сравнения элементов в массиве и сортировки их соответственно. Вы проверяете этот пост, где тот же вопрос уже answerd Sort Java Collection

0

Вы можете передать компаратор в Arrays.sort():

Arrays.sort(array, new Comparator<Project>() { 
    @Override 
    public int compare(Project o1, Project o2) { 
     return o1.id - o2.id; // or whatever property you want to sort 
    } 
}); 
0

Предполагая, что у вас есть List<Project>, все, что вам нужно в Java8 (так как вы можете использовать lambda expression для компаратора) является:

Collections.sort(list, (o1, o2) -> o1.getName().compareTo(o2.getName())); 

И Список имеет метод сортировки (компаратор), поэтому вы можете еще больше сократить его:

list.sort((o1, o2) -> o1.getName().compareTo(o2.getName())); 

Со ссылками метод становится еще чище:

list.sort(Comparator.comparing(Project::getName)); 
+0

Кто пользуется публичными полями? – shmosel

+0

Предположения. Но вы правы, я отредактировал ответ. Благодарю. – Stas

+0

Я все еще смущен. Все ваши решения используют методы доступа. Вы имели в виду ссылки на методы? – shmosel