根据日期对哈希集进行排序

时间:2013-09-19 10:10:14

标签: java

如何根据日期

对哈希集内的数据进行排序

我有一个程序,我将以这种格式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;
    }
}

3 个答案:

答案 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>();

更好的是,使用带有自定义TreeSetComparator并对条目进行排序,同时立即添加条目。