我试图实现这样的事情:
Arrays.sort(files, new Comparator<File>(){
public int compare(File f1, File f2)
{
return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified());
} });
问题是我有FTPFile
而不是File
,FTPFile
只有getTimestamp()。
如何根据修改日期实施过滤器以仅下载最新文件?
或者我如何调整我展示的使用FTPFile
代替File
的示例?
看起来应该是这样的:
public class NewestFileOnlyFilter implements FileListFilter<FTPFile> {
//logic to return only the newest file.
}
答案 0 :(得分:1)
以下是你如何做到这一点:
public class NewestFileOnlyFilter implements FileListFilter<FTPFile> {
@Override
public List<FTPFile> filterFiles(FTPFile[] files) {
return Arrays.stream(files) // 1
.max(Comparator.comparing(FTPFile::getTimestamp)) // 2
.map(Collections::singletonList) // 3
.orElse(Collections.emptyList()); // 4
}
}
对参考线的一些澄清:
主要步骤:
max
方法搜索流的最大元素; max
; Comparator.comparing
方法
getTimestamp
在这种情况下,我们按照修改时间比较文件。将搜索结果(具有最大时间戳的文件)包装到包含单个元素(如果有)的列表中;
FileListFilter
内发生,但我们仍然处理这种情况。答案 1 :(得分:0)
时间戳 (通常)上次修改时间 - 请参阅javadocs ...
/***
* Returns the file timestamp. This usually the last modification time.
*
* @return A Calendar instance representing the file timestamp.
***/
public Calendar getTimestamp()
Calendar
实施Comparable
。
答案 2 :(得分:0)
你可以这样做:
public int compare(File f1, File f2)
{
Calendar dateOfmyFile=f1.getTimestamp();
Date dateF1 = dateOfmyFile.getTime();
dateOfmyFile=f2.getTimestamp();
Date dateF2 = dateOfmyFile.getTime();
long difference = dateF1-dateF2;
if(difference<0)
return dateF2;
else
return dateF1;
}