java - 排序元素 File[] 数组
问题描述
我正在尝试对fList
数组中的文件名进行排序。最初fList
是这样排序的https://i.stack.imgur.com/OCqJR.jpg和之后的结果https://i.stack.imgur.com/GgBsq.jpg
我希望根据文件名之前的前面的数字对结果进行排序,如下所示:
- 硒介绍
- java和Selenium学习的完整安装指南
- 为 Selenium 自动化复习 Java 概念
- CORE JAVA 深入手动测试人员和初学者
...
- 奖金!!学生特辑
从输出控制台可以看出,我有something()
方法从fList[x]
文件名中获取数字以便稍后进行比较。swap(fList[x], fList[y])
我不确定我是否了解File[]
实际存储和更改其元素的方式
public static void main(String[] args) {
File file = new File("pathToFolder");
File[] fList = file.listFiles();
for(int x = 0; x < fList.length; x++) {
int numberX = something(fList[x]);
for(int y = x; y < fList.length; y++) {
int numberY = something(fList[y]);
if(numberX > numberY) {
File temp = fList[x];
fList[x] = fList[y];
fList[y] = temp;
}
}
}
for(int x = 0; x < fList.length; x++) {
System.out.println(fList[x].getName());
}
}
static int something(File file) {
String temp = file.getName();
String number = "";
for(int st = 0; st < temp.length(); st++) {
if(temp.charAt(st) == '.') break;
number += temp.charAt(st);
}
int fileNumber = Integer.parseInt(number);
return fileNumber;
}
解决方案
如果您正在使用Java8
,请尝试此操作,您当然可以对其进行调整以符合您的要求:
List<File> sortedFiles = stream(requireNonNull(file.listFiles()))
.sorted(File::compareTo)
.collect(toList());
您还可以使用sort
该类提供的方法Arrays
:
File[] sortedFiles = file.listFiles();
// One liner
Arrays.sort(sortedFiles);
这两种解决方案都依赖于类的
compareTo
实现File
。链接到官方文档。
我在我的个人git repo中添加了一个测试
推荐阅读
- asp.net-core - 如何使用 SignalR 在 ASP.Net Core 中实现屏幕共享和查看?
- regex - Clickhouse 查询使用正则表达式
- java - 使用复合键批量插入实体
- express-gateway - Express Gateway 向端点添加范围
- java - 从异常消息中提取 statusCode 和 message
- javascript - 赛普拉斯如何检查 div 中的背景是否发生变化
- python - 如何在 django 中自定义帖子的响应消息?
- python - 从提取的文本中删除/排除标签scrapy
- java - 在 Jms 中检查消息源 - Weblogic 12c
- tensorflow - 什么是 tf FlatMapDataset