我正在尝试将所有未转换的文件放在/ attachments文件夹中,然后使用java以数组形式对非转换后的附件数组进行字母数字排序。 这是我的代码
// get all non-transformed files in the /attachments folder and put in array
File f = new File("D:\\template_export\\template\\attachments");
ArrayList<String> attachmentFiles = new ArrayList<String>(Arrays.asList(f.list()));
System.out.println("attachmentFiles :" + attachmentFiles);
我需要对以下输出进行排序:
attachmentFiles :[0.gif, 1.gif, 10.gif, 11.gif, 12.gif, 13.gif, 14.gif,
15.gif, 16.gif, 17.gif, 18.gif, 19.gif, 2.gif, 20.gif, 21.gif, 22.gif,
23.gif, 24.gif, 25.gif, 26.gif, 27.gif, 28.gif, 29.gif, 3.gif, 30.html,
31.messages, 32.messages, 4.gif, 5.gif, 6.gif, 7.gif, 8.gif, 9.gif]
我尝试使用以下代码:
Collections.sort(attachmentFiles);
for(String counter: attachmentFiles){
System.out.println(counter);
}
但它没有排序。
答案 0 :(得分:0)
需要什么,自定义逻辑来排序数据列表。可能是下面的解释会帮你写同样的。
Collections#sort(List<T> list, Comparator<? super T> c)
根据引发的顺序对指定的列表进行排序 指定比较器。列表中的所有元素必须是相互的 使用指定的比较器进行比较(即c.compare(e1,e2) 不得为任何元素e1和e2抛出ClassCastException 列表)。
这是你如何传递自定义逻辑。现在如何创建Comparator
逻辑。
示例 -
List<String> attachmentFiles = ...;
Collections.sort(attachmentFiles,new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// logic -
//a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second
}
});
答案 1 :(得分:0)
要比较两个不同长度的数字字符串,就好像它们是数字一样,需要用0个字符填充最短的字符串。
首先,有必要搜索两个字符串中的第一个点。比较他们的位置并填写0&#34;最短&#34;使用零编号,如下面的代码所示。
Collections.sort(attachmentFiles,new Comparator<String>() {
public int compare(String o1, String o2) {
int point1 = o1.indexOf('.');
// If no point is present we assume it is present as last position
if (point1 == -1) {
point1 = o1.length();
}
int point2 = o2.indexOf('.');
// If no point is present we assume it is present as last position
if (point2 == -1) {
point2 = o2.length();
}
if (point1 > point2) {
char[] chars = new char[point1-point2];
Arrays.fill(chars, '0');
o2 = new String(chars) + o2;
} else if (point1 < point2) {
char[] chars = new char[point2-point1];
Arrays.fill(chars, '0');
o1 = new String(chars) + o1;
}
return o1.compareTo(o2);
}
});