假设用户输入目录 如何根据姓名的首字母对所有文件进行排序和计数?我想必须有一个比较器进行排序,但我不知道如何处理。
答案 0 :(得分: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);
}
答案 1 :(得分:1)
如果您使用的是java-8,则有一种优雅的方法可以执行此操作:
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>
答案 2 :(得分:0)
看一下this帖子,他们正在使用listFiles函数。然后,您就可以使用文件名计算并执行任何操作。我不认为现有的功能可以准确地检索出你需要的东西......
答案 3 :(得分:0)
使用Google Guava 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);
}
答案 4 :(得分: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);
}
}