如何根据日期
对哈希集内的数据进行排序我有一个程序,我将以这种格式2015-01-17
从mongodb获取数据,稍后我会将其转换为MMM dd yyyy
格式,现在我如何在这里对数据进行排序?
这是我的程序
public class MyObject {
public static void main(String args[]) {
String sym = "BAC";
Set<String> set = myDAO.getInstance().getMeAllExpirationDates(sym);
for (String String : set) {
System.out.println(String);
}
}
public Set<String> getMeAllExpirationDates(String sym) throws Exception {
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf2 = new SimpleDateFormat("MMM dd yyyy");
Set<String> set = new HashSet<String>();
BasicDBObject query = new BasicDBObject();
query.put("symbol", sym);
Security sec = null;
DBCursor cursor = collection.find(query);
while (cursor.hasNext()) {
sec = (Security) cursor.next();
Date date = sdf1.parse(sec.getTkExpirationDate());
String result = sdf2.format(date);
set.add(result);
}
return set;
}
}
答案 0 :(得分:3)
HashSet
是一个无序集合 - 它的元素不以任何特定顺序存储。您可以将HashSet
视为包含物品的行李 - 物品全部放在行李中,但不按任何特定顺序排列。
如果您希望Set
包含特定订单中的元素,请使用SortedSet
的实施,例如TreeSet
,而不是HashSet
。
TreeSet
以“自然顺序”存储其元素,如果您想要不同的顺序,则可以使用TreeSet
的{{1}}构造函数;提供您自己的Comparator
,用于定义您希望对元素进行排序的顺序。
答案 1 :(得分:1)
最简单的方法是使用Comparator
。您需要在对象中实现Comparable
接口,以告诉它们日期之间的关系。有关您问题的具体答案,请参阅Telling HashSet how to sort the data。
答案 2 :(得分:1)
您应该使用implmentation LinkedHashSet来保持插入顺序
替换
Set<String> set = new HashSet<String>();
带
Set<String> set = new LinkedHashSet<String>();
更好的是,使用带有自定义TreeSet的Comparator并对条目进行排序,同时立即添加条目。