如何按部分文件名对流中的文件进行排序?
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()));
我使用以下方法首先按名称排序文件,然后按修改日期排序:
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()));