gpt4 book ai didi

java - 如何区分两个自定义树?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:35:28 25 4
gpt4 key购买 nike

A 具有以下描述文件存储库的类。有一个充当主存储库的服务器,然后有多个客户端计算机。

class Entry
{
String name;
String filename;
ZonedDateTime lastModified;
}

class Section
{
String name;
String directory
List<Section> sections;
List<Entry> Entries;
}

Section localRepositoryDescription = scanFilesystem();

有时我需要将客户端存储库更新到最新版本。客户端将它的 repo 描述发送到服务器。为了执行更新,我需要知道哪些文件已更新 - 获取一个仅包含更新条目的树 (entryOnServer.lastModified > localEntry.lastModified)。我已经阅读了各种算法来区分两棵树,但我仍然不确定如何完成这项任务。

一旦我得到了这个 diff 树,我就会压缩这些修改后的文件以存档并将相应的响应发送给客户端。

最佳答案

假设您已经管理了 lastModified 属性,如果在您的 Entry 中实现了 hashCode()/equals(Object obj) 方法,您可以创建两个 Set<Entry> ,一个在客户端,一个在服务器。然后在服务器端,您可以使用如下代码比较这两个集合

List<Entry> updated = getServerEntries().stream().filter(serverEntry -> {
return getClientEntries().contains(serverEntry);
}).collect(Collectors.toList());

显然这段代码假设客户端需要根据服务器端同步Set<Entry> ,一般来说,contains 方法会先使用 hash 搜索 Entry,如果找到两个相等的 hashCode,则使用 equals

一个简单的哈希码可以是

  @Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((filename == null) ? 0 : filename.hashCode());
result = prime * result + ((lastModified == null) ? 0 : lastModified.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}

好的部分是,假设您的应用会在发生时自动更新 Entry.lastModified,那么您可以免费获得所有这些。

关于java - 如何区分两个自定义树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58487667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com