यह एक पुरानी प्रतिक्रिया हो सकती है लेकिन मैं एक तुलनित्र है कि एक को सॉर्ट होगा बनाने के लिए इस पोस्ट से कुछ उदाहरण का इस्तेमाल किया ArrayList
की HashMap<String, String>
सूची में एक वस्तु से, टाइमस्टैम्प जा रहा है कि।
मेरे पास ये वस्तुएं हैं:
ArrayList<Map<String, String>> alList = new ArrayList<Map<String, String>>();
मानचित्र वस्तुएँ इस प्रकार हैं:
Map<String, Object> map = new HashMap<>();
// of course this is the actual formatted date below in the timestamp
map.put("timestamp", "MM/dd/yyyy HH:mm:ss");
map.put("item1", "my text goes here");
map.put("item2", "my text goes here");
वह मैपिंग वह है जिसका उपयोग मैं अपने सभी ऑब्जेक्ट्स को सरणी सूची में, alList.add(map)
फ़ंक्शन का उपयोग करके , लूप के भीतर करने के लिए करता हूं ।
अब, मैंने अपना खुद का तुलनित्र बनाया:
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
public class DateSorter implements Comparator {
public int compare(Object firstObjToCompare, Object secondObjToCompare) {
String firstDateString = ((HashMap<String, String>) firstObjToCompare).get("timestamp");
String secondDateString = ((HashMap<String, String>) secondObjToCompare).get("timestamp");
if (secondDateString == null || firstDateString == null) {
return 0;
}
// Convert to Dates
DateTimeFormatter dtf = DateTimeFormat.forPattern("MM/dd/yyyy HH:mm:ss");
DateTime firstDate = dtf.parseDateTime(firstDateString);
DateTime secondDate = dtf.parseDateTime(secondDateString);
if (firstDate.isAfter(secondDate)) return -1;
else if (firstDate.isBefore(secondDate)) return 1;
else return 0;
}
}
मैं अब किसी भी समय एरेनेटर को कॉल कर सकता हूं और यह मेरे एरे को सॉर्ट करेगा, मुझे लेटेस्ट टाइमस्टैम्प पोजिशन 0 (लिस्ट में सबसे ऊपर) और लिस्ट के अंत में सबसे शुरुआती टाइमस्टैम्प देगा। नए पदों को मूल रूप से शीर्ष पर रखा जाता है।
Collections.sort(alList, new DateSorter());
इससे किसी को मदद मिल सकती है, यही वजह है कि मैंने इसे पोस्ट किया है। तुलना () फ़ंक्शन के भीतर रिटर्न स्टेटमेंट पर विचार करें। परिणाम 3 प्रकार के होते हैं। रिटर्निंग 0 अगर वे समान हैं, तो रिटर्निंग> 0 अगर पहली डेट दूसरी डेट से पहले है और रिटर्निंग <0 है तो पहली डेट दूसरी डेट के बाद की है। यदि आप चाहते हैं कि आपकी सूची उलट हो, तो बस उन दो रिटर्न स्टेटमेंट को स्विच करें! सरल =]