2012-04-25 19 views
5

मेरे पास संशोधित तिथि के अनुसार पथ को सॉर्ट करने के लिए कुछ कोड है। मैं पथ को रिवर्स ऑर्डर में सॉर्ट करने के लिए कुछ कोड भी लिखना चाहता हूं, और बाद में कुछ अन्य सॉर्टिंग विधियों को जोड़ना चाहता हूं। क्या एक वर्ग फ़ाइल से सभी सॉर्टिंग करने का कोई तरीका है? या क्या मुझे एक और कक्षा PathSortByDateReverse, PathSortByCreated, PathSortByFoo, आदि बनाना है। इसके अलावा, मैं विभिन्न सॉर्टिंग विधियों का उपयोग कैसे करूं?एकल वर्ग फ़ाइल में तुलनित्र को कई बार कार्यान्वित करना

import java.nio.file.Path; 
import java.util.Comparator; 

public class PathSortByDate implements Comparator<Path> { 

@Override 
public int compare(Path first, Path second) { 
    long seconddate = second.toFile().lastModified(); // get just the filename 
    long firstdate = first.toFile().lastModified(); 

    if (firstdate == seconddate) { 
     return 0; 
    } else if (firstdate > seconddate) { 
     return 1; 
    } else { 
     return -1; 
    } 
} 
} 

मैं तो साथ अन्य वर्ग से इसे कहते:

public static ArrayList<Path> sortArrayListByDate(ArrayList<Path> pathlist) { 
    Collections.sort(pathlist,new PathSortByDate()); 
    return pathlist; 
}  

उत्तर

1

आप रिवर्स तुलनित्र बनाने की जरूरत है, बस इसे बनाने के लिए और

Collections.reverseOrder() 
+0

धन्यवाद, मैंने इसके बारे में सोचा, लेकिन शायद मैं बाद में अन्य सॉर्टिंग विधियों को जोड़ना चाहता हूं, और मूल रूप से यह समझना चाहता हूं कि यह सब कैसे काम करता है। – localhost

3

साथ यह रिवर्स क्यों नहीं जाते अज्ञात आंतरिक कक्षाओं के लिए?

public static final Comparator<Person> ID_DESC 
    = new Comparator<Person>() { 
     public int compare(Person p1, Person p2) { 
     return -1 * p1.getId().comparedTo(p2.getId()); 
     // reversed order 
     } 
    }; 
+0

आप अधिक जानकारी प्राप्त कर सकते हैं [यहां] (http://stackoverflow.com/questions/10309929/implementing-comparator-multiple-times-in-a-single-class-file/10310033#10310033) –

2

मैं आमतौर पर ऐसा करता हूं। ध्यान दें, निर्माता "निजी" है और उदाहरण प्राप्त करने के लिए "सार्वजनिक कारखाना विधि" है। किसी भी बिंदु पर दो पथकंप्यूटर उदाहरण कभी मौजूद होंगे। यदि आप अपने कोड को अनुकूलित करने और सर्वोत्तम प्रथाओं का उपयोग करने में हैं तो यह एक बड़ा सौदा है।

import java.nio.file.Path; 
import java.util.Comparator; 

final public class PathComparator implements Comparator<Path> { 

// comparator for in order 
final private static PathComparator ascendingOrderComparatorDate = new PathComparator(true); 
// comparator for reverse order 
final private static PathComparator descendingOrderComparatorDate = new PathComparator(false); 

final private int isAscendingOrderInt; 

final public PathComparator getPathComparator(boolean isAscendingOrder) { 
    return isAscendingOrder ? ascendingOrderComparatorDate : descendingOrderComparatorDate; 
} 

private PathComparator(boolean isAscendingOrder) { 
    this.isAscendingOrderInt = isAscendingOrder ? 1 : -1; 
} 

@Override 
public int compare(Path first, Path second) { 
    // for optimization (not required but highly recommended) 
    if(first == second) return 0; 

    long seconddate = second.toFile().lastModified(); // get just the filename 
    long firstdate = first.toFile().lastModified(); 

    if (firstdate == seconddate) { 
     return 0; 
    } else if (firstdate > seconddate) { 
     return isAscendingOrderInt * 1; 
    } else { 
     return isAscendingOrderInt * -1; 
    } 
}}