Как этот сценарий может работать с ArrayList? - PullRequest
0 голосов
/ 09 сентября 2018

Этот сценарий действительно отличается, я хочу сделать это, но я не мог понять, как это сделать. Мой сценарий таков:

У меня есть One ArrayList, и этот ArrayList всегда обновляется новым. Пожалуйста, думай так.

LIST ONE - мой список целей. У меня есть эти пункты в этом списке:

A В C

Я сохраняю этот список два раза при первом запуске: list_old_one - list_new_one

Через несколько минут появляются новые вещи со старыми.

A В С D

А также я сохраняю этот список: list_new_one

Я хочу сделать это. Если C не существует до list_one_now, я хочу показать только это, и я хочу удалить все другие элементы и просто показать C не с D

Я устал от секции equal и removeAll, но также и от предмета D , потому что он не равен.

Мой ArrayList:

TinyDB tinydb = new TinyDB(getApplicationContext());

//Adding current list to new one
tinydb.remove("list_new_one");
tinydb.putListString("list_new_one", all_list);

ArrayList<String> list_old = new ArrayList<>(tinydb.getListString("list_old_one"));
ArrayList<String> list_new = new ArrayList<>(tinydb.getListString("list_new_one"));

   list_old.removeAll(list_new);
   if (list_new.size() != 0) {
        //Adding results to database
        DBRecentlyHelper dbRecentlyHelper = new DBRecentlyHelper(getApplicationContext());
        dbRecentlyHelper.RecentlyADD(list_old, current_user);
        dbRecentlyHelper.close();

       //Updating old list
       tinydb.remove("list_old_one");
       tinydb.putListString("list_old_one", all_list);
  }else{
       //Updating old list
       tinydb.remove("list_old_one");
       tinydb.putListString("list_old_one", all_list);
  }

Я действительно смотрю через неделю, но все же я получаю неправильные результаты.

Если у кого-нибудь есть идея, я буду рад за нее. Большое спасибо.

Ответы [ 3 ]

0 голосов
/ 09 сентября 2018

Вы получаете неправильный список, потому что вы сравниваете списки со списками. Делай так;

Создайте SQLite, подобный вашему SQLite DBRecentlyHelper. Например: DBOldListItems и DBOldListItems

Сохраните все элементы в новой БД, что я сказал, и сравните их элемент с элементом.

СТАРЫЕ ПУНКТЫ:

A - B - C

НОВЫЕ ПУНКТЫ:

A - B - C - D

Пример: * ** 1022 тысячу двадцать одна * if(!olditems.get(i).item.equals(newitems.get(i)){ olditems.get(i).item } Если, элемент не будет равен массиву newitems, вы получите результат. После результатов вы можете обновить ваши старые элементы и делать это больше, больше, больше.

Если вы не могли ничего понять, пожалуйста, свяжитесь со мной. Возможно мой английский не понятен:)

0 голосов
/ 10 сентября 2018

Успешный ответ - хороший, но и трудный путь. Потому что вам не нужно получать предметы. ОС Android всегда может соответствовать коротким или длинным текстам.

Заменить:

list_old.removeAll(list_new);

Кому:

for(String i: new ArrayList<>(list_old)) {
                for(String j: new ArrayList<>(list_new)) {
                    if (!i.equals(j)) {
                        list_old.add(i);
                        break;
                    }
                }
            }

Вы получите правильные результаты.

0 голосов
/ 09 сентября 2018

Вы можете попробовать это:

myList.stream().filter(item -> item.equals("C")).collect(Collectors.toList());

Поскольку элемент "D" отсутствует в list_new, то removeAll не может удалить его. Если вам нужно проверить, содержит ли ваш список элемент «C», вы можете сделать так:

if(myList.contains("C")){myList = myList.stream().filter(item -> item.equals("C")).collect(Collectors.toList());}

Вам не нужно использовать два списка, чтобы удалить все остальные элементы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...