2016-03-07 3 views
1

У меня есть следующие LinkedHashSetсортировка 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")); 
+4

Почему LinkedHashSet, а не TreeSet с компаратором на основе даты? –

+0

Могу ли я использовать TreeSet для устранения дубликатов при входе? – Ingram

+1

Да, устанавливает устранить дубликаты. – jtahlborn

ответ

2

Используйте TreeSet с компаратором, который анализирует текст на сегодняшний день.

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); 
} 
+0

Эй, это действительно здорово, потрясающе и так просто – Ingram

+0

Где я могу прочитать, как создавать компараторы, подобные этому? – Ingram

+0

http://www.mkyong.com/java8/java-8-lambda-comparator-example/ – andrucz

Смежные вопросы