【问题标题】:sorting a LinkedHashset by date time按日期时间排序 LinkedHashset
【发布时间】:2025-12-09 10:05:02
【问题描述】:

我有以下 LinkedHashset

它与 LinkedHashset 一样,因为我在添加时有很多重复的条目,它可以防止这种情况发生。

我怎样才能对我的 LinkedHashset 进行排序

LinkedHashSet<String> uniqueStrings = new LinkedHashSet<>();

uniqueStrings.add("03/03/2016  00:00:00");
uniqueStrings.add("03/03/2016  00:30:00");
uniqueStrings.add("03/03/2016  01:00:00");
uniqueStrings.add("03/03/2016  00:30:00");
uniqueStrings.add("03/03/2016  00:01:00");



List<String> asList = new ArrayList<>(uniqueStrings);
System.out.println((asList+ "\n"));

【问题讨论】:

  • 为什么是 LinkedHashSet 而不是带有基于日期时间的比较器的 TreeSet?
  • 我可以使用 TreeSet 来消除入口处的重复项吗?
  • 是的,集合消除重复。
  • 请参阅 API 文档以了解 TreeSet's add 方法:“如果指定的元素尚不存在,则将其添加到此集合中。”。更简单地说,它实现了 Set 并符合 Set 契约。
  • 我不知道该怎么做,我可以阅读什么来帮助?

标签: java sorting linkedhashset


【解决方案1】:

将 TreeSet 与将文本解析为 Date 的比较器一起使用。

private static Date safeParse(DateFormat dateFormat, String str) {
    try {
        return dateFormat.parse(str);
    } catch (ParseException e) {
        throw new RuntimeException(e);
    }
}

public static void main(String[] args) {
    DateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
    Comparator<String> comparator = (a, b) -> safeParse(format, a).compareTo(safeParse(format, b));

    Set<String> uniqueStrings = new TreeSet<>(comparator);

    uniqueStrings.add("03/03/2016  00:00:00");
    uniqueStrings.add("03/03/2016  00:30:00");
    uniqueStrings.add("03/03/2016  01:00:00");
    uniqueStrings.add("03/03/2016  00:30:00");
    uniqueStrings.add("03/03/2016  00:01:00");

    uniqueStrings.stream().forEach(System.out::println);
}

【讨论】: