Java 类来存储多个比较器

Java 类来存储多个比较器,java,class,sorting,nested,comparator,Java,Class,Sorting,Nested,Comparator,我的任务是对文件(文件列表)进行排序,这取决于用户输入的名称、大小、修改日期、大小、类型以及将来可以添加的其他类型的条件 因此,如果用户输入“dir/sort=esdn”(扩展名、大小、日期、名称) 这意味着按扩展排序,程序无法决定按大小排序 我认为将所有这些比较器放在同一个类中或与lambda表达式放在一起会很混乱,所以我有了创建一个新clas的想法,其中所有比较代码都将是 public class Comparisons { public class Ext implements

我的任务是对文件(文件列表)进行排序,这取决于用户输入的名称、大小、修改日期、大小、类型以及将来可以添加的其他类型的条件

因此,如果用户输入“dir/sort=esdn”(扩展名、大小、日期、名称) 这意味着按扩展排序,程序无法决定按大小排序

我认为将所有这些比较器放在同一个类中或与lambda表达式放在一起会很混乱,所以我有了创建一个新clas的想法,其中所有比较代码都将是

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> {
        ...
    }
}
公共类比较{
公共类Ext实现了比较器{
...
}
公共类大小实现比较器{
...
}
公共类日期实现比较器{
...
}
公共类名实现了Comparator{
...
}
公共类类型实现了Comparator{
...
}
}
我知道如何运行它,但我似乎找不到一种方法来创建新的内部类而不首先创建外部类。在我看来,Java会有类似的东西,因为它在sytax sugar上有很多功能,最好的选择是新的软件包

其余的代码将是按第一个字母排序的递归函数

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;
        }
    ...
    }
private boolean排序(字符串子字符串,列表fin){
比较器k=零;
char in=substring.toLowerCase().charAt(0);
开关(输入){
案例n:
k=比较。新名称();
打破
案例e:
k=比较。新Ext();
打破
案例s:
k=比较。新尺寸();
打破
案例d:
k=比较。新日期();
打破
案例t:
k=比较。新类型();
打破
违约:
打破
}
...
}
我知道这不起作用,但这是我想要实现的总体想法


非常感谢

您可以使用
枚举

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;
        }
    }
}

您可以使用
枚举

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;
        }
    }
}

您可以使用
枚举

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;
        }
    }
}

您可以使用
枚举

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;
        }
    }
}

“我认为将所有这些比较器放在同一个类中或作为lambda表达式将是一件麻烦事”——这有什么麻烦?lambda路由似乎是最好的选择,特别是当您使用方法引用时。代码段用于可运行的web语言示例。改为使用代码示例{}按钮。我认为这会提高代码的可重用性,并且在末尾添加一堆类或方法会让我觉得很混乱,因为它们显然是累赘的,并且执行类似的任务,仅仅添加到末尾似乎不太好,但这可能就是我“我认为将所有这些比较器放在同一个类中或作为lambda表达式会很麻烦”-这有什么麻烦?lambda路由似乎是最好的选择,特别是当您使用方法引用时。代码片段用于可运行的web语言示例。请使用代码示例{}按钮。我认为这会提高代码的可重用性,在末尾添加一堆类或方法对我来说很麻烦,因为它们显然是累赘的,并且执行类似的任务,而仅仅添加到末尾似乎不太好,但这可能就是我自己。”我认为将所有这些比较器放在同一个类中或作为lambda表达式会很麻烦。”“这有什么麻烦?lambda路由似乎是最好的选择,特别是当您使用方法引用时。代码片段用于可运行的web语言示例。请使用代码示例{}按钮。我认为这会提高代码的可重用性,在末尾添加一堆类或方法对我来说很麻烦,因为它们显然是累赘的,并且执行类似的任务,而仅仅添加到末尾似乎不太好,但这可能就是我自己。”我认为将所有这些比较器放在同一个类中或作为lambda表达式会很麻烦。”“这有什么麻烦?lambda路由似乎是最好的选择,特别是当您使用方法引用时。代码片段用于可运行的web语言示例。请使用代码示例{}按钮。我认为这会提高代码的可重用性,并且在末尾添加一堆类或方法对我来说很麻烦,因为它们显然是累赘的,并且执行类似的任务,仅仅添加到末尾似乎不太好,但这可能就是我