我有一对包含文件的文件夹。对共享文件名但具有不同的扩展名(在这种情况下,它们是.txt和.png对)。我希望将它们存储到HashMap<文件,文件>成对的。以下是我找到对的方法:
LinkedList<File> fileList = new LinkedList<File>(Arrays.asList(fileArray));
LinkedList<File> alreadyCompared = new LinkedList<File>();
HashMap<File, File> filePairs = new HashMap<File, File>();
for (Iterator<File> itr1 = fileList.iterator(); itr1.hasNext(); ) {
File comparator = itr1.next();
if (!alreadyCompared.contains(comparator)) {
String stringComparator = comparator.getName().split("\\.")[0];
alreadyCompared.add(comparator);
for (Iterator<File> itr2 = fileList.iterator(); itr2.hasNext(); ) {
File compared = itr2.next();
if (!alreadyCompared.contains(compared)) {
String stringCompared = compared.getName().split("\\.")[0];
if (stringComparator.equals(stringCompared)) {
if (comparator.getName().endsWith("txt")) {
filePairs.put(comparator, compared);
} else {
filePairs.put(compared, comparator);
}
}
}
}
}
}
return filePairs;
现在,当我有超过1000个要排序的文件时,这需要很多时间,并且我想找到一种更有效的方法。我还有什么方法可以对这些文件进行排序?
非常感谢!
答案 0 :(得分:1)
我将这些元素放在TreeMap
中,而不是将它们放在Map
之类的无序HashMap
中,因为它会对其进行排序。
根据链接的Javadoc,
基于红黑树的
NavigableMap
实施。地图根据其键的natural ordering或地图创建时提供的Comparator
进行排序,具体取决于使用的构造函数。
答案 1 :(得分:0)
我编写了一些代码来说明我的评论。
HashMap<File, File> filePairs = new HashMap<File, File>();
File dir = new File("your files directory");
File [] files = dir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".txt");
}
});
String fileName = "";
for (File txtFile : files) {
fileName = txtfile.getName().split("\\.")[0];
pngFile = new File(dir.getAbsolutePath() + fileName + ".png");
if (pngFile.exists()) {
filePairs.put(txtFile, pngFile);
}
}