【问题标题】:How to sync two ArrayLists in Java?如何在 Java 中同步两个 ArrayList?
【发布时间】:2015-12-17 19:38:48
【问题描述】:

我有两个 ArrayList。我想将列表与它们之间的最新数据同步。基本上,我的目标是将本地数据库与我的后端同步。所以我想用最新数据替换本地数据库,反之亦然。同步这两个列表的有效方法是什么(循环次数最少)?

详细说明:如果我的第一个列表有 15 个项目,而第二个列表有 9 个。那么我想制作两个列表,每个列表有 15 个项目,同时使用最新数据。

我的自定义对象:

public class CustomObject {
    private String uniqueId;
    private Date updatedAt;

    public String getUniqueId() {
        return uniqueId;
    }

    public void setUniqueId(String uniqueId) {
        this.uniqueId = uniqueId;
    }

    public Date getUpdatedAt() {
        return updatedAt;
    }

    public void setUpdatedAt(Date updatedAt) {
        this.updatedAt = updatedAt;
    }
}

谢谢。

【问题讨论】:

  • 您所说的“最新数据”是什么意思?我没弄清楚..你能举一个真实的例子吗?
  • 如果它们包含相同的数据,为什么需要列出?另外,数据是指相同的对象,还是其成员具有相同值的对象?
  • @Nirel 我的意思是我的自定义对象还有其他字段说描述。因此,如果两个列表中都存在的项目的描述发生变化,那么我需要确保最新的时间戳并放置最新的描述。
  • @njzk2 我的后端是 Parse。因此它将解析对象作为列表返回。我也从我的本地数据库中获取列表。这就是原因

标签: java android performance list arraylist


【解决方案1】:

如果我了解您想要什么,您是否正在尝试使用 2 个列表中的最新数据构建一个列表?有很多方法可以做到这一点,这里有一个使用地图的方法:

List<CustomObject> list // retrieved from local db
list.addAll(getListFromBackendDb());
Map<String, CustomObject> mappy = new HashMap<>();
for (CustomObject co : list) {
    CustomObject existing = mappy.get(co.getUniqueId());
    if (existing == null || co.getUpdatedAt().compareTo(existing.getUpdated()) > 0) {
        mappy.put(co.getUniqueId(), co);
    }
}
return new ArrayList<>(mappy.values());

【讨论】:

  • 我的意思是,我必须比较更新项目和新项目的两个列表,并在本地数据库中插入新/更新项目并将新/更新项目推送到后端。从您发布的代码中,该列表是否包含本地数据库和后端的所有项目??
猜你喜欢
  • 2016-08-15
  • 1970-01-01
  • 2015-11-03
  • 2017-04-21
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
  • 2023-04-04
  • 2011-03-11
相关资源
最近更新 更多