Java 哈希集正在添加重复的ChannelSftp.LsEntry
我正在尝试使用jsch库通过sftp下载文件。我成功地做到了这一点,但我只想下载尚未下载的文件。我正在收集一个条目列表,并尝试实现一个hashset来检查它们是否已经下载。问题是,它正在向哈希集添加重复项并重新下载所有文件。下面是我写的代码(好吧,重要的部分)Java 哈希集正在添加重复的ChannelSftp.LsEntry,java,hashset,jsch,Java,Hashset,Jsch,我正在尝试使用jsch库通过sftp下载文件。我成功地做到了这一点,但我只想下载尚未下载的文件。我正在收集一个条目列表,并尝试实现一个hashset来检查它们是否已经下载。问题是,它正在向哈希集添加重复项并重新下载所有文件。下面是我写的代码(好吧,重要的部分) Vector list=sftpChannel.ls(“*.gz”); 对于(ChannelSftp.LsEntry条目:列表){ 如果(设置添加(条目)){ sftpChannel.get(entry.getFilename(),fil
Vector list=sftpChannel.ls(“*.gz”);
对于(ChannelSftp.LsEntry条目:列表){
如果(设置添加(条目)){
sftpChannel.get(entry.getFilename(),fileDestination);
}
}
这都是一种方法。因此,当我再次调用该方法时,它应该只下载我以前没有下载的文件。然而,它并没有这样做。有什么建议吗?如果需要澄清,请告诉我。而不是
条目
将entry.getFilename()添加到集合
:
if (set.add(entry.getFilename())) {
sftpChannel.get(entry.getFilename(), fileDestination);
}
这里我假设getFilename
返回一个字符串
,并且您的应用程序允许定义这样一个集
之所以这样做(如果假设是正确的)是因为equals
在String
上定义得很好,这不会让两个相同的名称(相同的字符序列)在相同的集合中结束
但是,如果您无法修改set
,则应在ChannelSftp.LsEntry
上重写hashCode
和equals
,以反映您认为使两个LsEntry
对象相等的原因。请重写hashCode()和equals()HashSet上重复问题的方法这完全取决于“getFilename()”结果值的“equals”定义。1)检查ChannelSftp.LsEntry.hashCode()和equals()方法是如何实现的。也许这个类不适合作为散列结构键。2) 检查set变量的范围。它真的记得以前的电话吗?我发现这是最简单的解决方案。我只是将集合修改为一组字符串。非常感谢。
if (set.add(entry.getFilename())) {
sftpChannel.get(entry.getFilename(), fileDestination);
}