我声明了一个 ArrayList,如下所示:
ArrayList<HashMap<String, String>> oslist = new ArrayList<HashMap<String, String>>();
oslist的每个元素包含5个Hashmap:
HashMap<String, String> map = new HashMap<String, String>();
map.put(string, string);
map.put(string, string);
map.put(string, string);
map.put(string, string);
map.put(string, string);
其中之一是以下格式的日期:“yyyy-MM-dd'T'HH:mm:ss.SSS'Z'”
现在我已经编写了这个类来对日期格式进行排序。类及其用法如下:
日期对象.java
package com.test;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class DateObject implements Comparable<Object> {
private String date;
private String time;
public DateObject(String dates) {
try {
Date date_for = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
Locale.ENGLISH).parse(dates);
String date_upd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH)
.format(date_for);
//System.out.println(date_upd);
String[] parts = date_upd.split(" ");
this.date = parts[0];
this.time = parts[1];
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public int compareTo(Object o) {
DateFormat formatter;
Date date1 = null;
Date date2 = null;
formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
date1 = (Date) formatter.parse(this.date + " " + this.time);
DateObject other = (DateObject) o;
date2 = (Date) formatter.parse(other.date + " " + other.time);
} catch (ParseException e) {
e.printStackTrace();
}
catch(NullPointerException npe){
System.out.println("Exception thrown "+npe.getMessage()+" date1 is "+date1+" date2 is "+date2);
}
return date2.compareTo(date1);
}
@Override
public String toString(){
return this.date+" "+this.time;
}
}
测试.java
package com.test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<DateObject> list = new ArrayList<DateObject>();
;
DateObject d1 = new DateObject("2012-12-05T11:20:19.111Z");
list.add(d1);
d1 = new DateObject("2012-12-05T11:20:19.111Z");
list.add(d1);
d1 = new DateObject("2012-12-04T10:20:19.111Z");
list.add(d1);
d1 = new DateObject("2010-12-07T13:20:19.111Z");
list.add(d1);
d1 = new DateObject("2012-12-05T11:20:19.111Z");
list.add(d1);
Collections.sort(list);
for(DateObject d : list){
System.out.println(d);
}
}
// "yyyy-MM-dd HH:mm:ss
}
我的问题是如何使用此类对我的 oslist 进行排序?也就是说,当我根据日期 HashMap 对 oslist 进行排序时,我的其他 HashMap 也会相应地进行排序。需要注意的一件事是 oslist 中的日期将存储为字符串,所以我不能直接使用排序。谢谢。
最佳答案
您的Comparable
实现是错误的,它应该是:
public class DateObject implements Comparable<DateObject> {
...
@Override
public int compareTo(DateObject o) {
...
}
}
如果您想对默认情况下不可比较的map
条目进行排序,则必须使用特定的Comparator
:
Collections.sort(oslist.entrySet(), new Comparator<Map.Entry<String,String>>() {
...
});
但我不能建议你这样做或不这样做,因为我不知道你的映射包含什么(都是 String ?!)。
TreeMap
也可能很有用,因为它按键排序。
关于java - 如何在 Java 中对自定义 ArrayList 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25505648/