【发布时间】:2015-01-05 17:31:33
【问题描述】:
我有一个任务来对文件(文件列表)进行排序,这取决于用户输入的名称、大小、修改日期、大小、类型以及将来可以添加的其他类型的条件。
所以如果用户输入“dir /sort=esdn”(扩展名、大小、日期、名称) 这意味着按扩展排序,其中程序无法决定按大小排序...
我认为将所有这些比较器放在同一个类中或作为 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> {
...
}
}
我知道如何运行它,但我似乎无法找到一种方法来创建新的内部类而不先创建外部类。在我看来,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;
}
...
}
我知道这行不通,但这是我想要实现的总体思路。
非常感谢!
【问题讨论】:
-
“我认为将所有这些比较器放在同一个类中或作为 lambda 表达式会很麻烦” - 这有什么麻烦? lambda 路由似乎是最好的选择,尤其是如果您使用方法引用。
-
代码片段用于可运行的网络语言示例。请改用代码示例
{ }按钮。 -
我认为这对代码的可重用性会更好,并且在最后添加一堆类或方法对我来说感觉很乱,因为它们显然已经被说服并执行类似的任务,而只是添加到 end 不会'看起来不太好,但那可能只是我
标签: java class sorting nested comparator