Java 在单个类文件中多次实现comparator
我有一些按修改日期排序路径的代码。我还想编写一些代码来按相反的顺序对路径进行排序,稍后可能还想添加一些其他排序方法。有没有办法从一个类文件中进行所有排序?或者我必须创建另一个类PathSortByDateReverse、PathSortByCreated、PathSortByFoo等等。另外,我如何使用不同的排序方法Java 在单个类文件中多次实现comparator,java,comparator,Java,Comparator,我有一些按修改日期排序路径的代码。我还想编写一些代码来按相反的顺序对路径进行排序,稍后可能还想添加一些其他排序方法。有没有办法从一个类文件中进行所有排序?或者我必须创建另一个类PathSortByDateReverse、PathSortByCreated、PathSortByFoo等等。另外,我如何使用不同的排序方法 import java.nio.file.Path; import java.util.Comparator; public class PathSortByDate imple
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;
}
}}
谢谢,我想到了这一点,但我可能想在以后添加其他排序方法,基本上想更好地了解它的工作原理。您可以获得更多信息