whoopy_whale Posted October 13, 2008 Share Posted October 13, 2008 Hi, I have a hashmap with filenames as the keys and the related text as its values. For example:- Key - mar_2007 Value - March 2007 Key - jun_2008 Value - June 2008 And more like this including variations like may_apr_2008... How can I sort this data in reverse chronological order i.e latest first... Please help me with your suggestions. Link to comment https://www.neowin.net/forum/topic/681522-java-sorting-a-set-of-dates/ Share on other sites More sharing options...
0 JamesCherrill Posted October 13, 2008 Share Posted October 13, 2008 I think you're gonna have to convert the texts into proper Date vales in order to sort chronologically. Things like "June 2008" are easy (use SimpleDateFormat), but you will need to code something yourself to cope with "may_apr_2008" (whatever that means!). Link to comment https://www.neowin.net/forum/topic/681522-java-sorting-a-set-of-dates/#findComment-589958454 Share on other sites More sharing options...
0 _kane81 Posted October 13, 2008 Share Posted October 13, 2008 I'd create a date structure, out it in an ArrayList and then create a comparator and the do Collection.sort(); do a google search on java comparator and collection.sort public class MyDate implements Comparator{ private int year; private int month; ... getters and setters, constructor, eqauls() } MyDate myDate= new MyDate(1,2006); myArray.add(myDate); ... etc myArray.sort(myArray); Link to comment https://www.neowin.net/forum/topic/681522-java-sorting-a-set-of-dates/#findComment-589958466 Share on other sites More sharing options...
0 JamesCherrill Posted October 13, 2008 Share Posted October 13, 2008 _kane81 said: I'd create a date structure, out it in an ArrayList and then create a comparator and the do Collection.sort(); Date implements Comparable, so you can sort them without having to create a Comparator (unless you want something other than a strictly chronological sort) Link to comment https://www.neowin.net/forum/topic/681522-java-sorting-a-set-of-dates/#findComment-589958470 Share on other sites More sharing options...
0 _kane81 Posted October 13, 2008 Share Posted October 13, 2008 true, but he isnt specifying a day, guess you could set it to 1... he wants it reversed ... so maybe extend date and override compare and reverse the compare value? Link to comment https://www.neowin.net/forum/topic/681522-java-sorting-a-set-of-dates/#findComment-589958540 Share on other sites More sharing options...
0 JamesCherrill Posted October 13, 2008 Share Posted October 13, 2008 _kane81 said: true, but he isnt specifying a day, guess you could set it to 1... he wants it reversed ... so maybe extend date and override compare and reverse the compare value? Yes. SimpleDateFormat allows you to parse dates that have things (eg day) missing, so that's OK. As for the reversed sort... I like your idea - it's almost a one-liner public int compareTo(Date d) { return - super.compareTo(Date d)} Its the parsing of the "more like this including variations like may_apr_2008..." that worries me! Link to comment https://www.neowin.net/forum/topic/681522-java-sorting-a-set-of-dates/#findComment-589958568 Share on other sites More sharing options...
0 _kane81 Posted October 13, 2008 Share Posted October 13, 2008 changed mind :) my above suggestion is not really good design at all :( - poor seperation of behaviour. You should take a mix of my advice and James. so here is some example code - seperate out sort behaviour from the object public class ReverseDateComparator implements Comparator { public int compareTo(Date a, Date b) { return - a.compareTo(b) } } your main { ArrayList<Date> dateList = new ArrayList() .. add dates to the list dateList.add(new Date()); ..... Collection.sort(dateList, new ReverseDateComparator()); } Link to comment https://www.neowin.net/forum/topic/681522-java-sorting-a-set-of-dates/#findComment-589962458 Share on other sites More sharing options...
0 whoopy_whale Posted October 14, 2008 Author Share Posted October 14, 2008 Thanks JamesCherrill and _kane81 :) I used your ideas and found another solution(may sound wierd)... My requirement was to get a map with actual filenames as the key and the clean formatted text as the value which is sorted in the chronological order. for example:- key = may_2008 value = May 2008 key = mar_16_23_2008 value = May 16-23 2008 key = aug_sep_2007 value = August-September 2007 This must be sorted so that latest docs will be on top. The factor that worried me is the different combinations that can come in the filename part. Using your suggestions, I extracted a string out of the filename. If the day was specified,I'll use it. Or else I'll put 1 as the day. For month, I took the first month appearing in the name. Then I parsed it to create a Date object from this string. I used a TreeMap to store the dates so that it'll be sorted TreeMap dateList = new TreeMap(Collections.reverseOrder()); The keys were the Date objects and values were the filenames. I used a LinkedHashMap to retrieve the filenames from the TreeMap.Using a function I formatted the filenames as text to be displayed. Now the LinkedHashMap contains keys as the filenames and values as the text to be displayed. Is this a good solution? Or any other optimized solutions are available? Please put your suggestions. Link to comment https://www.neowin.net/forum/topic/681522-java-sorting-a-set-of-dates/#findComment-589964736 Share on other sites More sharing options...
0 _kane81 Posted October 14, 2008 Share Posted October 14, 2008 (edited) ^ hadnt seen "TreeMap(Collections.reverseOrder());" before... not sure what you are doing there.... I think your solutions sounds fine... however why do you keep using a map? maps are good/quick for lookups on a key. if you just want an ordered list, an arraylist (vector if thread safety is req) would be a better choice as it is more efficent in sorting/ordered stuff. edit: ok so your keeping a file name link as key... guess thats ok... either that or create a class that encapsulates a date and file name or maybe an actual link to the file.... ie public class MyFile implements comparable{ File file; Date date; public MyFile(File file) { setFile(file); } public void setFile(File file) { this.file = file; do some code to parse file name to date this.date = ..... } public int compareTo(MyFile file) { return this.file.getDate().compareTo(file.getDate()); } } Edited October 14, 2008 by _kane81 Link to comment https://www.neowin.net/forum/topic/681522-java-sorting-a-set-of-dates/#findComment-589965520 Share on other sites More sharing options...
0 _kane81 Posted October 14, 2008 Share Posted October 14, 2008 in the above arraylist you do not need the filename as a key.... if the user selects a displayed item, you can do list.get(selectedIndex).getFile() Link to comment https://www.neowin.net/forum/topic/681522-java-sorting-a-set-of-dates/#findComment-589965728 Share on other sites More sharing options...
0 whoopy_whale Posted October 14, 2008 Author Share Posted October 14, 2008 Thanks _kane81 for the valuable inputs. The existing scenario resembles something like this - in a jsp page, function call is made to get the filenames and the display text. The function is written in a java file and it will return the data in a map. Now this sorting problem came up and I had to find a solution that will not disrupt the existing system very much. I used hashMap because I thought it was the best solution. Anyways I need the filenames and the display text built from this filename. By using a Map I can get both with just a single function call. TreeMap(Collections.reverseOrder()); --> This is a quick solution to reverse the order in Tree Map. As you know, TreeMap sorts in the natural ordering of keys or ascending order. Collections.reverseOrder() will reverse it easily...so I get reverse sorted filename list. Ofcourse it can be done using Comparable interface but this is a very easy and handy solution :) and its working fine... And I used LinkedHashMap so that the order is preserved as in TreeMap. Thus I can use filenames as keys and display text as values and can be sure that the order is same as the sorted order in TreeMap... Link to comment https://www.neowin.net/forum/topic/681522-java-sorting-a-set-of-dates/#findComment-589965870 Share on other sites More sharing options...
0 donchen Posted November 12, 2008 Share Posted November 12, 2008 Sorry to ressurect this thread but i have a similar problem and wonder if anyone can give me some advices or suggestions. I am using this method to create a date. Quote public String getDate() { Calendar cal = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); return sdf.format(cal.getTime()); } Then i store the DATE as the key and a USER object as the value in a Hashmap. Now i will like to sort the KEY (which is the date) with the latest date at the top. How can i do this? please advice.. Thanks~ Link to comment https://www.neowin.net/forum/topic/681522-java-sorting-a-set-of-dates/#findComment-590112380 Share on other sites More sharing options...
0 donchen Posted November 12, 2008 Share Posted November 12, 2008 Oh no! I just realised that i can't do that. Because the date MAY NOT be unique hence cannot be used as a key! Anyone can give me some suggestions please? Actually the USER object does contain the date. So is there a way i can sort the USER OBJECT according to the dates but calling user.getDate() from the USER OBJECT and maybe store in an arraylist of USER object? Link to comment https://www.neowin.net/forum/topic/681522-java-sorting-a-set-of-dates/#findComment-590112448 Share on other sites More sharing options...
0 Argote Posted November 12, 2008 Share Posted November 12, 2008 it would be easier to sort if you stored the date in yyyy/mm/dd format as that would be a simple Arrays.sort() since it would be alphabetical Link to comment https://www.neowin.net/forum/topic/681522-java-sorting-a-set-of-dates/#findComment-590113178 Share on other sites More sharing options...
0 deepika Posted February 20, 2010 Share Posted February 20, 2010 i want to sort set of csv files named with dates like my filename is beno_hawai_enc_01-Aug-2009.csv beno_hawai_enc_03-Aug-2009.csv beno_hawai_enc_02-Aug-2009.csv how to read these files in sorted order based on filename please give me some ide its very urgent my email id is deepu.bhanu@gmail.com thank you Link to comment https://www.neowin.net/forum/topic/681522-java-sorting-a-set-of-dates/#findComment-592260752 Share on other sites More sharing options...
Question
whoopy_whale
Hi,
I have a hashmap with filenames as the keys and the related text as its values.
For example:-
Key - mar_2007
Value - March 2007
Key - jun_2008
Value - June 2008
And more like this including variations like may_apr_2008...
How can I sort this data in reverse chronological order i.e latest first...
Please help me with your suggestions.
Link to comment
https://www.neowin.net/forum/topic/681522-java-sorting-a-set-of-dates/Share on other sites
14 answers to this question
Recommended Posts