Java 在单个类文件中多次实现comparator

Java 在单个类文件中多次实现comparator,java,comparator,Java,Comparator,我有一些按修改日期排序路径的代码。我还想编写一些代码来按相反的顺序对路径进行排序,稍后可能还想添加一些其他排序方法。有没有办法从一个类文件中进行所有排序?或者我必须创建另一个类PathSortByDateReverse、PathSortByCreated、PathSortByFoo等等。另外,我如何使用不同的排序方法 import java.nio.file.Path; import java.util.Comparator; public class PathSortByDate imple

我有一些按修改日期排序路径的代码。我还想编写一些代码来按相反的顺序对路径进行排序,稍后可能还想添加一些其他排序方法。有没有办法从一个类文件中进行所有排序?或者我必须创建另一个类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;
    }
}
}
import java.nio.file.Path;
导入java.util.Comparator;
公共类PathSortByDate实现了Comparator{
@凌驾
公共整数比较(路径第一,路径第二){
long seconddate=second.toFile().lastModified();//只获取文件名
long firstdate=first.toFile().lastModified();
如果(firstdate==seconddate){
返回0;
}否则如果(第一个日期>第二个日期){
返回1;
}否则{
返回-1;
}
}
}
然后,我从另一个类调用它:

public static ArrayList<Path> sortArrayListByDate(ArrayList<Path> pathlist) {
    Collections.sort(pathlist,new PathSortByDate());
    return pathlist;
}    
publicstaticarraylistsortarraylistbydate(arraylistpathlist){
排序(路径列表,新路径sortbydate());
返回路径列表;
}    

您不需要制作反向比较器,只需制作并使用

Collections.reverseOrder()

为什么不使用匿名的内部类呢

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
      }
    };
公共静态最终比较器ID\u DESC
=新的比较器(){
公共整数比较(人员p1、人员p2){
返回-1*p1.getId().comparedTo(p2.getId());
//颠倒顺序
}
};

我通常会这样做。注意,构造函数是“私有”的,并且有一个“公共工厂方法”来获取实例。在任何给定点都将存在两个PathComparator实例。如果您热衷于优化代码和使用最佳实践,这将是一件大事

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;
    }
}}
import java.nio.file.Path;
导入java.util.Comparator;
最后一个公共类PathComparator实现了Comparator{
//顺序比较器
最终私有静态PathComparator ascendingOrderComparatorDate=新的PathComparator(true);
//逆序比较器
最终私有静态PathComparator下降OrderComparatorDate=新PathComparator(false);
最终私有int为scensdingOrderint;
最终公共路径比较器getPathComparator(布尔值isAscendingOrder){
返回isAscendingOrder?上升ORDER比较日期:下降ORDER比较日期;
}
专用路径比较器(布尔isAscendingOrder){
this.isAscendingOrderInt=isAscendingOrder?1:-1;
}
@凌驾
公共整数比较(路径第一,路径第二){
//用于优化(不需要,但强烈建议)
if(first==second)返回0;
long seconddate=second.toFile().lastModified();//只获取文件名
long firstdate=first.toFile().lastModified();
如果(firstdate==seconddate){
返回0;
}否则如果(第一个日期>第二个日期){
返回isAscendingOrderInt*1;
}否则{
返回isAscendingOrderInt*-1;
}
}}

谢谢,我想到了这一点,但我可能想在以后添加其他排序方法,基本上想更好地了解它的工作原理。您可以获得更多信息