我有一个任务来排序文件(文件列表),依赖于用户输入的名称,大小,修改日期,大小,类型以及将来可以添加的其他类型的条件。
因此,如果用户输入“dir / sort = esdn”(扩展名,大小,日期,名称) 这意味着按扩展名排序,程序无法按大小排序......
我认为将所有这些比较器放在同一个类或lambda表达式中会很麻烦,所以我想创建一个所有比较代码都是
的新claspublic 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> {
...
}
}
我知道如何运行它以及所有,但我似乎无法找到一种方法来创建新的内部类而不首先创建外部类。在我看来,Java会有类似的东西,因为它对sytax糖有很大的影响,最好的改变是新包装。
其余的代码是递归函数,按第一个字母排序
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;
}
...
}
我知道这不起作用,但这是我想要实现的一般想法。
非常感谢!
答案 0 :(得分:3)
您可以使用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
方法版本,但您不需要创建任何类,但仍然可以像普通类一样使用它:
Comparator<File> comp = FileComparator.NameComparator;
//use the comparator