Class 存储多个比较器
Class to store multiple comparators
我有一个任务是根据用户输入的名称、大小、修改日期、大小、类型和其他类型的条件对文件(文件列表)进行排序。
因此,如果用户输入 "dir /sort=esdn"(扩展名、大小、日期、名称)
这意味着按扩展排序,程序无法决定按大小排序...
我认为将所有这些比较器放在相同的 class 或作为 lambda 表达式会很混乱,所以我想创建一个新的类,其中所有比较代码都是
public class Comparisons {
public class Ext implements Comparator<File> {
...
}
public class Size implements Comparator<File> {
...
}
public class Date implements Comparator<File> {
...
}
public class Name implements Comparator<File> {
...
}
public class Type implements Comparator<File> {
...
}
}
我知道如何运行它,但我似乎无法找到一种方法来创建新的内部 class,而不先创建外部 class。在我看来 Java 会有类似的东西,因为它非常注重语法糖,最好的选择是新包。
其余代码将是按首字母排序的递归函数
private boolean sort(String substring, List<File> fin) {
Comparator<File> k = null;
char in = substring.toLowerCase().charAt(0);
switch (in) {
case n:
k = Comparisons.new Name();
break;
case e:
k = Comparisons.new Ext();
break;
case s:
k = Comparisons.new Size();
break;
case d:
k = Comparisons.new Date();
break;
case t:
k = Comparisons.new Type();
break;
default:
break;
}
...
}
我知道这行不通,但这是我想要实现的总体思路。
非常感谢!
您可以使用 enum
:
public enum FileComparator implements Comparator<File> {
DateComparator {
@Override
public int compare(File o1, File o2) {
// TODO Auto-generated method stub
return 0;
}
},
SizeComparator {
@Override
public int compare(File o1, File o2) {
// TODO Auto-generated method stub
return 0;
}
},
NameComparator {
@Override
public int compare(File o1, File o2) {
// TODO Auto-generated method stub
return 0;
}
}
}
enum
中的每个元素都可以有自己版本的 compare
方法,您不需要创建任何 classes,但您仍然可以像这样使用它正常 class:
Comparator<File> comp = FileComparator.NameComparator;
//use the comparator
我有一个任务是根据用户输入的名称、大小、修改日期、大小、类型和其他类型的条件对文件(文件列表)进行排序。
因此,如果用户输入 "dir /sort=esdn"(扩展名、大小、日期、名称) 这意味着按扩展排序,程序无法决定按大小排序...
我认为将所有这些比较器放在相同的 class 或作为 lambda 表达式会很混乱,所以我想创建一个新的类,其中所有比较代码都是
public class Comparisons {
public class Ext implements Comparator<File> {
...
}
public class Size implements Comparator<File> {
...
}
public class Date implements Comparator<File> {
...
}
public class Name implements Comparator<File> {
...
}
public class Type implements Comparator<File> {
...
}
}
我知道如何运行它,但我似乎无法找到一种方法来创建新的内部 class,而不先创建外部 class。在我看来 Java 会有类似的东西,因为它非常注重语法糖,最好的选择是新包。
其余代码将是按首字母排序的递归函数
private boolean sort(String substring, List<File> fin) {
Comparator<File> k = null;
char in = substring.toLowerCase().charAt(0);
switch (in) {
case n:
k = Comparisons.new Name();
break;
case e:
k = Comparisons.new Ext();
break;
case s:
k = Comparisons.new Size();
break;
case d:
k = Comparisons.new Date();
break;
case t:
k = Comparisons.new Type();
break;
default:
break;
}
...
}
我知道这行不通,但这是我想要实现的总体思路。
非常感谢!
您可以使用 enum
:
public enum FileComparator implements Comparator<File> {
DateComparator {
@Override
public int compare(File o1, File o2) {
// TODO Auto-generated method stub
return 0;
}
},
SizeComparator {
@Override
public int compare(File o1, File o2) {
// TODO Auto-generated method stub
return 0;
}
},
NameComparator {
@Override
public int compare(File o1, File o2) {
// TODO Auto-generated method stub
return 0;
}
}
}
enum
中的每个元素都可以有自己版本的 compare
方法,您不需要创建任何 classes,但您仍然可以像这样使用它正常 class:
Comparator<File> comp = FileComparator.NameComparator;
//use the comparator