3

如何根据日期对哈希集中的数据进行排序

我有一个程序,我将在其中以这种格式从 mongodb 获取数据2015-01-17,稍后我会将其转换为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;
    }
}
4

3 回答 3

3

HashSet是一个无序的集合 - 它的元素不以任何特定的顺序存储。您可以将HashSet其视为包含物品的袋子-物品都在袋子中,但没有任何特定顺序。

如果您希望 aSet包含按特定顺序排列的元素,请使用 的实现SortedSet,例如TreeSet,而不是HashSet

TreeSet默认情况下以“自然顺序”存储其元素,如果您想要不同的顺序,您可以使用带有;的TreeSet构造函数。Comparator提供您自己Comparator的定义您希望元素排序的顺序。

于 2013-09-19T10:13:24.087 回答
1

最简单的方法是使用Comparator. 您需要Comparable在对象中实现接口,以告诉它们日期之间的关系。请参阅告诉 HashSet 如何对数据进行排序以获取问题的具体答案。

于 2013-09-19T10:13:33.273 回答
1

您应该使用实现LinkedHashSet来保持插入顺序

代替

Set<String> set = new HashSet<String>();

Set<String> set = new LinkedHashSet<String>();

更好的是,使用带有自定义比较器的TreeSet并在立即添加条目时对条目进行排序。

于 2013-09-19T10:15:33.653 回答