我正在从FTP服务器轮询文件。我有一个用例来根据时间戳排序数组FTPFile []。我想先修改文件作为第一个对象,最后修改文件作为我的FTPFile []数组对象中的最后一个对象。如何根据java中的时间戳对FTPFile []数组对象进行排序
有人可以请建议我如何在Java中做。由于
我正在从FTP服务器轮询文件。我有一个用例来根据时间戳排序数组FTPFile []。我想先修改文件作为第一个对象,最后修改文件作为我的FTPFile []数组对象中的最后一个对象。如何根据java中的时间戳对FTPFile []数组对象进行排序
有人可以请建议我如何在Java中做。由于
Java7或更低:的
见fge后
Java8:
final FTPFile[] files = new FTPFile[100]; //or what ever
final Comparator<FTPFile> sorter = (e1, e2) -> e1.getTimestamp().compareTo(e2.getTimestamp());
Arrays.sort(files, sorter);
编写自定义Comparator
为FTPFile
对象,然后用使用Arrays.sort()
那Comparator
。
请注意,此方法将排列在适当位置。
假设你正在谈论Apache的公网FTPFile,比较可以写成这样:
private static final Comparator<FTPFile> CMP = new Comparator<>()
{
@Override
public int compare(final FTPFile a, final FTPFile b)
{
return a.getTimeStamp().compareTo(b.getTimeStamp());
}
}
如果使用Java 8再看看@ ifLoop的解决方案
假设FTPFile是一种java文件,或者可以翻译得到一个
Collections.sort(list,comparator),你可以使用下面的比较器:
class FileComparator implements Comparator<File> {
@Override
public int compare(File o1, File o2) {
try {
BasicFileAttributes attr1 = Files.readAttributes(o1.toPath(), BasicFileAttributes.class);
BasicFileAttributes attr2 = Files.readAttributes(o2.toPath(), BasicFileAttributes.class);
return attr1.lastModifiedTime().compareTo(attr2.lastModifiedTime());
} catch (IOException e) {
// Handle this the way you want
e.printStackTrace();
}
return 0;
}
}
结果是'虽然Stream',不是数组 – fge
编辑,对提示:) – ifloop