J'ai un ArrayList
qui stocke Date
s et je les ai triés par ordre décroissant. Maintenant, je veux les afficher dans un ListView
. Voici ce que j'ai fait jusqu'à présent:
spndata.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> arg0, View arg1,
int position, long arg3) {
switch (position) {
case 0:
list = DBAdpter.requestUserData(assosiatetoken);
for (int i = 0; i < list.size(); i++) {
if (list.get(i).lastModifiedDate != null) {
lv.setAdapter(new MyListAdapter(
getApplicationContext(), list));
}
}
break;
case 1:
list = DBAdpter.requestUserData(assosiatetoken);
Calendar c = Calendar.getInstance();
SimpleDateFormat df3 = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a");
String formattedDate3 = df3.format(c.getTime());
Log.v("log_tag", "Date " + formattedDate3);
for (int i = 0; i < list.size(); i++) {
if (list.get(i).submitDate != null) {
String sDate = list.get(i).submitDate;
SimpleDateFormat df4 = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a");
String formattedDate4 = df4.format(sDate);
Map<Date, Integer> dateMap = new TreeMap<Date, Integer>(new Comparator<Date>(){
public int compare(Date formattedDate3, Date formattedDate4) {
return formattedDate3.compareTo(formattedDate4);
}
});
lv.setAdapter(new MyListAdapter(
getApplicationContext(), list));
}
}
break;
case 2:
break;
case 3:
break;
default:
break;
}
}
public void onNothingSelected(AdapterView<?> arg0) {
}
});
Créez Arraylist<Date>
De la classe Date. Et utilisez Collections.sort()
pour l'ordre croissant.
Trie la liste spécifiée dans l'ordre croissant, selon l'ordre naturel de ses éléments.
Pour le trier dans l'ordre décroissant Voir Collections.reverseOrder ()
Collections.sort(yourList, Collections.reverseOrder());
Ajoutez simplement comme ceci dans le cas 1: comme ceci
case 0:
list = DBAdpter.requestUserData(assosiatetoken);
Collections.sort(list, byDate);
for (int i = 0; i < list.size(); i++) {
if (list.get(i).lastModifiedDate != null) {
lv.setAdapter(new MyListAdapter(
getApplicationContext(), list));
}
}
break;
et mettre cette méthode à la fin de votre classe
static final Comparator<All_Request_data_dto> byDate = new Comparator<All_Request_data_dto>() {
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a");
public int compare(All_Request_data_dto ord1, All_Request_data_dto ord2) {
Date d1 = null;
Date d2 = null;
try {
d1 = sdf.parse(ord1.lastModifiedDate);
d2 = sdf.parse(ord2.lastModifiedDate);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return (d1.getTime() > d2.getTime() ? -1 : 1); //descending
// return (d1.getTime() > d2.getTime() ? 1 : -1); //ascending
}
};
La date de comparaison de () que vous utilisez fonctionnera par ordre croissant.
Pour faire décroissant, inversez simplement la valeur de compareTo () qui sort. Vous pouvez utiliser une seule classe Comparator qui prend un indicateur/énumération dans le constructeur qui identifie l'ordre de tri
public int compare(MyObject lhs, MyObject rhs) {
if(SortDirection.Ascending == m_sortDirection) {
return lhs.MyDateTime.compareTo(rhs.MyDateTime);
}
return rhs.MyDateTime.compareTo(lhs.MyDateTime);
}
Vous devez appeler Collections.sort () pour trier réellement la liste.
En remarque, je ne sais pas pourquoi vous définissez votre carte dans votre boucle for. Je ne sais pas exactement ce que votre code essaie de faire, mais je suppose que vous voulez remplir les valeurs indexées de votre boucle for dans la carte.
Si la date au format chaîne le convertit au format date pour chaque objet:
String argmodifiledDate = "2014-04-06 22:26:15";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try
{
this.modifiledDate = format.parse(argmodifiledDate);
}
catch (ParseException e)
{
e.printStackTrace();
}
Triez ensuite l'arraylist par ordre décroissant:
ArrayList<Document> lstDocument= this.objDocument.getArlstDocuments();
Collections.sort(lstDocument, new Comparator<Document>() {
public int compare(Document o1, Document o2) {
if (o1.getModifiledDate() == null || o2.getModifiledDate() == null)
return 0;
return o2.getModifiledDate().compareTo(o1.getModifiledDate());
}
});
Date
est Comparable
alors créez simplement une liste de List<Date>
et triez-la à l'aide de Collections.sort()
. Et utilisez Collections.reverseOrder()
pour obtenir le comparateur dans reverse ordering
.
De Java Doc
Renvoie un comparateur qui impose l'ordre inverse du comparateur spécifié. Si le comparateur spécifié est nul, cette méthode est équivalente à reverseOrder () (en d'autres termes, elle renvoie un comparateur qui impose l'inverse de l'ordre naturel à une collection d'objets qui implémentent l'interface Comparable).