Удалить дубликаты из двух ArrayList типа ArrayList<Каталог> Android

Деятельность MyListView.java содержит два массива: catalogueArrayList и catalogTempArrayList соответственно.

ArrayList<Catalogue> catalogueArrayList = new ArrayList<Catalogue>();
ArrayList<Catalog> catalogTempArrayList = new ArrayList<Catalog>();

В действии onCreate() просмотр списка заполняется с помощью catalogueArrayList. При обновлении новые данные переносятся во второй массив arrayList в фоновом режиме, а затем добавляются в каталог ArrayList. Я не хочу очищать свой адаптер перед обновлением списка. Одна идея состоит в том, чтобы удалить дубликаты элементов и использовать временный массив для отображения новых данных. Моя проблема в том, что я не знаю, как сравнить два архива, найти дубликаты, удалить их и создать третий массив. Будет ли это решение эффективным? Будет ли это потреблять раз?

Вот мой каталог по классу.

public class Catalogue {


    public String client_tel;
    public String product_name;
    public String product_price;
    public String product_desc;
    public String product_img;

    public Catalogue(String _client_tel, String _product_name,String _product_price,String _product_desc,String _product_img){

        this.client_tel=_client_tel;
        this.product_name=_product_name;
        this.product_price=_product_price;
        this.product_desc=_product_desc;
        this.product_img=_product_img;

    }

Класс каталога является просто дубликатом этого класса.

== Обновление ==

Вот моя задача обновления

list.setOnUpdateTask(new OnUpdateTask() {

            public void updateBackground() {
                // simulate long times operation.
                try {
                    Thread.sleep(1500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

            public void updateUI() {

                catalogueArrayList.removeAll(catalogTempArrayList);
                efficientAdapter.notifyDataSetChanged();
            }

            public void onUpdateStart() {

                new loadDataAsync().execute();

            }

        });

и мой эффективный конструктор адаптеров

public EfficientAdapter(Activity a, ArrayList<Catalog> d) {

        activity = a;
        data = d;
        inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        //  imageLoader = new ImageLoader(activity.getApplicationContext());
        //imageLoader=new ImageLoader(activity.getApplicationContext());

        imageLoader = ImageLoader.getInstance();


    }

2 ответа

Решение

Есть несколько способов сделать это.

Во-первых, вы должны определить equals функция в вашем Catalogue а также Catalog классы. Проверьте, является ли объект каталогом или классом каталога, затем сравните.

public boolean equals(Object o){
   if (o == null){
        return false;
   }
   if (o instanceof Catalog){
        Catalog c = (Catalog) o;
        return c.product_name.equals(this.product_name)
   }
   if (o instanceof Catalogue){
        Catalogue cg = (Catalogue) o;
        return cg.product_name.equals(this.product_name)
   }
   return false;
}

Тогда вы могли бы использовать Iterator<Catalogue> проверить, есть ли в catalogTempArrayList и удалите его из catalogueArrayList, Или просто используйте removeAll функция от ArrayList,

catalogueArrayList.removeAll(catalogTempArrayList);

Если вы хотите удалить Catalog экземпляр из catalogTempArrayList, Используйте это вместо:

catalogTempArrayList.removeAll(catalogueArrayList);

Эти функции стоят O (n * m), так как n и m количество элементов массивов.

Попробуйте использовать

catalogueArrayList.removeAll(catalogTempArrayList);

Это удалит все Catalogue предметы, которые два ArrayList имеют общее с catalogueArrayList,

Примечание: не будет никаких изменений в catalogTempArrayList, У него все еще будут все предметы.

Вы должны переопределить equals а также hashcode метод в вашем Catalogue учебный класс.

Другие вопросы по тегам