2015-12-17 3 views
-1

У меня есть два ArrayList. Я хочу синхронизировать списки с последними данными между ними. В принципе, моя цель - синхронизировать локальную БД с моим бэкэнд. Поэтому я хочу заменить локальную БД на последние данные и наоборот. Каков эффективный способ (с минимальными циклами) для синхронизации этих двух списков?Как синхронизировать два ArrayLists в Java?

Подробно: если мой первый список содержит 15 элементов, а второй - 9. Затем я хочу сделать два списка по 15 элементов каждый и в то же время с последними данными.

Мои CustomObject:

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; 
    } 
} 

Спасибо.

+1

Что вы имеете в виду, когда говорите «последние данные»? я не понял. Можете ли вы дать реальный пример? – Nirel

+0

Почему вам нужны списки, если они содержат одни и те же данные? Кроме того, по данным, вы имеете в виду те же объекты или объекты, которые имеют одинаковые значения для своих членов? – njzk2

+0

@Nirel Я имею в виду, что мой пользовательский объект имеет другие поля, которые говорят об описании. Поэтому, если описание изменяется для элемента, который существует в обоих списках, тогда мне нужно убедиться, что последняя метка времени и поместить последнее описание. –

ответ

0

Если я понимаю, что вы хотите, вы пытаетесь создать единый список с самыми последними данными из 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()); 
+0

Я имел в виду, что мне нужно сравнить два списка обновленных элементов и новых элементов и вставить новые/обновленные элементы в локальную БД и нажать на новые/обновленные элементы на бэкэнд. Из кода, который вы опубликовали, содержит ли список все элементы как из локальной базы данных, так и из базы данных? –

Смежные вопросы