目录和文件之间的Collections.sort

时间:2013-05-18 05:58:17

标签: android collections

我正在使用字符串的Arraylist: ArrayList entries = new ArrayList(Arrays.asList(“”));

动态赋值。它可能包含目录或文件的名称。

我需要在ListView中显示条目,以便首先按排序顺序显示所有目录,然后按排序顺序显示文件。

这可能吗?如果有,任何提示?感谢帮助..我正在使用

Collections.sort(条目); 对我的参赛作品进行排序。

2 个答案:

答案 0 :(得分:0)

将2参数版本与自定义比较器一起使用。比较它:

boolean firstFileIsDirectory = file1.isDirectory();
boolean secondFileIsDirectory = file2.isDirectory();
if(firstFileIsDirectory  && !secondFileIsDirectory){
    return -1;
}
if(!firstFileIsDirectory  && secondFileIsDirectory){
    return 1;
}
return String.compare(filename1, filename2);

答案 1 :(得分:0)

我做到了。使用的逻辑:将条目分成两个ArrayList。一个有目录的其他文件。分别对这两个ArrayLists进行排序。最后将这两个添加到“条目”。这是代码:

private void sortEntries(String path){
    ArrayList<String> entriesDir = new ArrayList<String>(Arrays.asList(""));
    ArrayList<String> entriesFile = new ArrayList<String>(Arrays.asList(""));
    entriesDir.removeAll(entriesDir);
    entriesFile.removeAll(entriesFile);
    int fileCounter=0, dirCounter=0;
    path = path.equals("/") ? "" : path;
    for(int i=1;i<=entries.size();i++){
        if((new File(path+"/"+entries.get(i-1))).isFile()) entriesFile.add(fileCounter++, entries.get(i-1));
        else entriesDir.add(dirCounter++, entries.get(i-1));
    }
    Collections.sort(entriesDir,String.CASE_INSENSITIVE_ORDER);
    Collections.sort(entriesFile,String.CASE_INSENSITIVE_ORDER);
    entries.removeAll(entries);
    entries.addAll(entriesDir);
    entries.addAll(entriesFile);
}