2014-12-31 90 views
-3

假設一個目錄是由用戶輸入的。
如何根據名字的第一個字母對所有文件進行排序和計數?我認爲必須有一個用於排序的比較器,但我不知道如何進行計數。根據文件名的首字母對文件進行排序和計數

+0

第一個字母?字母? – SMA

+0

'HashMap'(字母作爲鍵,作爲值計數)可能會做這項工作 –

回答

1

經典的方式做到這一點是讓每個字母鍵和計數的信,一個地圖的價值

List<String> names = new ArrayList<>(); 
Map<Character,Integer> map = new HashMap<>(); 
for (String name : names) 
    { 
    char firstLetter = name.charAt(0); 
    if(map.containsKey(firstLetter)) 
    map.put(firstLetter, map.get(firstLetter)+1); 
    else 
    map.put(firstLetter, 1); 
    } 
0

看看this後,他們使用的是listFiles函數。然後你就可以通過文件名來計算和做任何你想做的事情。我不認爲有整整獲取你所需要的現有功能...

0

使用谷歌番石榴TreeMultiset很容易:

public static void main(String[] args) throws Exception { 
    File dir = new File(*<directory>*); 
    Multiset<Character> counts = TreeMultiset.create(); 
    for(File file: dir.listFiles()) { 
     counts.add(file.getName().charAt(0)); 
    } 
    System.out.println(counts); 
} 
0

試着這麼做:

File mydirectory = new File("c:\\users"); 
Map<Character, Integer> alpaCount = new HashMap<Character, Integer>(); 
Character firstChar; 
Integer count; 
for (File file : mydirectory.listFiles()) { 
    firstChar = file.getName().charAt(0); 
    count = alpaCount.get(firstChar); 
    if (count == null) { 
     alpaCount.put(firstChar, 1); 
    } else { 
     alpaCount.put(firstChar, count + 1); 
    } 
} 
1

如果您正在使用有一種優雅的方式來做到這一點:

import static java.util.stream.Collectors.counting; 
import static java.util.stream.Collectors.groupingBy; 

... 

Map<Character, Long> countMap = Files.list(Paths.get("some/directory")) 
            .filter(p -> !Files.isDirectory(p)) 
            .collect(groupingBy(p -> p.getFileName().toString().charAt(0), counting())); 

它所做的是:

  • 通過應用濾波得到給出
  • 只得到文件的目錄Stream<Path>
  • 收集每個文件在一個Map<Character, List<Path>>,按它們的第一個字母分組
  • 計算每個文件中的元素數List<Path>
相關問題