Reputation: 1645
I have arrayLists of Dates which is in String format then how can I sort this arraylists,
ArrayList<String> aryBeginDate;
ArrayList<String> aryDueDate;
for (int i = 0; i < arySubject.size(); i++) {
RowItem row = new RowItem();
row.setSubject(arySubject.get(i).toString());
row.setUser(aryFromUser.get(i).toString());
if (aryBeginDate.equals(" ")) {
row.setStartDate(" ");
} else {
row.setStartDate(aryBeginDate.get(i).toString()); \\Have to sort at this line
}
if (aryDueDate.equals(" ")) {
row.setEndDate(" ");
} else {
row.setEndDate(aryDueDate.get(i).toString()); \\Have to sort at this line
}
aryListBean.add(row);
}
Upvotes: 5
Views: 48811
Reputation: 4528
Very Simple Answer:For Ascending just call this method:
Collections.sort(mArrayList, new OutcomeAscComparator());
public class OutcomeAscComparator implements Comparator<Select>
{
public int compare(Select left, Select right) {
return left.getOutcome().compareTo(right.getOutcome());
}
}
Select is my model, For Descending:
Collections.sort(mArrayList, new OutcomeDescComparator());
public class OutcomeDescComparator implements Comparator<Select>
{
public int compare(Select left, Select right) {
return right.getOutcome().compareTo(left.getOutcome());
}
}
Please dont forget to refresh your list view IF you want your list to be AScending and Descending
mListView.invalidateViews();
mAdapter.notifyDataSetChanged();
Upvotes: 4
Reputation:
You can use a Comparator
to sort the list. Something like this:
Collections.sort(aryListBean, new Comparator<RowItem>() {
@Override
public int compare(RowItem r1, RowItem r2) {
// Place your compare logic here
}
});
Upvotes: 1
Reputation: 691685
Don't use a String when you want a Date. Use a Date. You should only transfom the Date to a String when displaying it. Otherwise, everywhere in the code, the date should of type Date. This is what allows sorting in chronological order, because dates have a natural order which is chronological.
So, once the RowItem
has a startDate
and an endDate
, both being of type Date
, you can sort a list of row items by start date using a simple comparator:
Collections.sort(rowItems, new Comparator<RowItem>() {
@Override
public int compare(RowItem r1, RowItem 2) {
return r1.getStartDate().compareTo(r2.getStartDate());
}
});
Also, fix your indentationof if/else blocks, because your way is really not readable:
if (aryBeginDate.equals(" ")) {
row.setStartDate(" ");
}
else {
row.setStartDate(aryBeginDate.get(i).toString());
}
Upvotes: 12
Reputation: 577
First convert the String in Date and create the arraylist. Then use the Collection sort method for sorting the arraylist.
Upvotes: 0
Reputation: 22018
This will be very painful if you try to sort this yourself with Strings. I'd recommend you to parse the String to a Date (check JodaTime for a very convenient Date/Time tool) and then sort with java.util.Collections.sort().
Upvotes: 1
Reputation: 2753
There is an in built function on ArrayList sort()
. Since you are using String, this will work.
Upvotes: 0