2013-05-18 2 views
0

문자열의 Arraylist를 사용 중입니다. ArrayList entries = new ArrayList (Arrays.asList (""));디렉토리와 파일 사이의 Collections.sort

그리고 동적으로 값을 제공합니다. 디렉토리 또는 파일의 이름을 포함 할 수 있습니다.

먼저 모든 디렉터리가 정렬 순서로 표시되고 정렬 순서로 표시되도록 ListView에 항목을 표시해야합니다.

이것이 가능합니까? 예, 힌트가 있다면? 도와 주셔서 감사합니다. 사용하고 있습니다

Collections.sort (entries); 내 항목을 정렬합니다.

답변

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); 
+0

빠른 반응과 힌트를 주셔서 감사합니다. 게이가 .. 시도 할 것입니다 .. –

+0

다른 논리를 염두에두고 있습니까? –

+0

그것은 의사 코드이지만 올바른 함수 이름을 넣으면 작동합니다. 나는 그 기술을 직장에서 내 자신의 파일 목록에 사용합니다. –

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); 
} 
관련 문제