如何按部分文件名对流中的文件进行排序?

How to sort files in a stream by partial filename?

我使用以下方法首先按名称排序文件,然后按修改日期排序:

Files.list(Paths.get(importDir))
        .map(Path::toFile)
        .sorted(Comparator.comparing(File::getName).thenComparingLong(File::lastModified))
        .forEachOrdered(file -> System.out.println(file.getName()));
                

问题:如何重构 File::getName 部分以仅根据部分文件名进行比较,例如:StringUtils.substringBefore(file.getName(), "_")?

您可以用 File 对象上的 lambda 表达式替换方法引用,但您必须指定类型(请参阅其他讨论 here):

Files.list(Paths.get(importDir))
     .map(Path::toFile)
     .sorted(Comparator.<File, String> comparing(f -> StringUtils.substringBefore
                                                      (f.getName(), "_"))
                       .thenComparingLong(File::lastModified))
     .forEachOrdered(file -> System.out.println(file.getName()));