我已成功使用以下代码对文件的Arraylist进行排序:
Comparator<File> stringLengthComparator = new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
return Integer.compare((int) (o1.length() / 1000),
(int) (o2.length() / 1000));
}
};
Collections.sort(flLst, stringLengthComparator);
这会对文件列表进行排序,即flLst,但唯一的问题是上面的代码需要API级别19及以上,而我当前的API最低要求是API级别9.我尝试了以下但我无法交换文件:
for(x=0;x<flLst.size();x++)
val1=flLst.get(x);
for(x=0;x<flLst.size();x++)
{
for(int j=i;j<flLst.size();j++)
{
if(val1.length()>flLst.get(j).length())
{
temp=val1;
val1=flLst.get(j);
flLst.get(j)=temp; // I get issue here as swapping file variables is not allowed this way
}
}
}
我可以使用API级别9的解决方案吗?
答案 0 :(得分:1)
如文档中所述,整数的compare()方法:
以数字方式比较两个int值。返回的值是相同的 将返回的内容:
Integer.valueOf(x).compareTo(Integer.valueOf(y))
因此,在您的情况下,请尝试以下内容,而不是在API级别1中添加:
Comparator<File> stringLengthComparator = new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
return Integer.valueOf((int) (o1.length() / 1000)).compareTo(Integer.valueOf((int) (o2.length() / 1000)));
}
};
答案 1 :(得分:0)
Comparator<File> stringLengthComparator = new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
return o1.length() - o2.length();
}
};
你的解决方案只是让事情过于复杂。
答案 2 :(得分:0)
快速轻松地比较按尺寸:
Arrays.sort(fileList, new Comparator<File>() {
@Override
public int compare(File f1, File f2) {
return Long.compare(f1.length(), f2.length());
// For descending
// return -Long.compare(f1.length(), f2.length());
}
});