问题
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.
回答1:
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.
回答2:
try this to sort integers
return(p1.getIntProperty() - p2.getIntProperty());
回答3:
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
回答4:
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;
}
});
}
回答5:
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
}
});
回答6:
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));
来源:https://stackoverflow.com/questions/14953934/sort-an-array-of-objects-in-java