2

I am working on a report module that shows the time spent and number of tasks. The values are set in the Java Bean and the bean object is stored in a array.I am using separate queries to get time and number of tasks.Now i have to sort the array based on time and number of tasks. The code below compares only Strings:

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

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

I have problems in sorting the integer value of a property in JavaBean which is stored in an array.Any help is greatly appreciated.

cowls
  • 24,013
  • 8
  • 48
  • 78
santhosh
  • 1,191
  • 4
  • 14
  • 28

6 Answers6

7

In your comments below the question you say you have:

Project[] array = new Project[3];

If I were you I'd declare Project as

public class Project implements Comparable<Project> {

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

Then you can sort your array by simply calling

Arrays.sort(array);

If you don't want your class to implement the Comparable interface you can pass a comparator to 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
        }
    });

I used an anonymous one, you could also extract it to it's own class if needed elsewhere.

jlordo
  • 37,490
  • 6
  • 58
  • 83
0

How about something like:

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;
    }
   });
}
cowls
  • 24,013
  • 8
  • 48
  • 78
0

try this to sort integers

return(p1.getIntProperty() - p2.getIntProperty());
codeMan
  • 5,730
  • 3
  • 27
  • 51
0

Did you look into the Comparator and Comparable interfaces in java. You can use the compare() method to compare the elements in the array and sort them accordingly. You check this post where same question is already answerd Sort Java Collection

Community
  • 1
  • 1
Swagatika
  • 3,376
  • 6
  • 30
  • 39
0

You can pass a comparator to 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
    }
});
blalasaadri
  • 5,990
  • 5
  • 38
  • 58
Lenchik
  • 51
  • 3
0

Assuming you have a List<Project>, all you need in Java8 (since you can use lambda expression for the Comparator) is:

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

And List has a sort(Comparator) method, so you can shorten this even further:

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

With method references it becomes even cleaner:

list.sort(Comparator.comparing(Project::getName));
Johnny
  • 14,397
  • 15
  • 77
  • 118