Este escenario es realmente diferente, quiero hacerlo pero no pude descubrir cómo hacerlo. Mi escenario es así:

Tengo uno ArrayList y este ArrayList siempre se actualiza con uno nuevo. Por favor piensa así.

LISTA UNO es mi lista de objetivos. Tengo estos artículos en esta lista:

A si C

Estoy guardando esta lista dos veces en el primer lanzamiento: list_old_one - list_new_one

Después de unos minutos vienen artículos nuevos con artículos viejos.

A si C D

Y también estoy guardando esta lista: list_new_one

Quiero hacer esto. Si C no existe en list_one_now, quiero mostrar solo esto y quiero eliminar todos los demás elementos y solo mostrar C no con D

Estoy cansado de la sección equal y removeAll pero también aparece el elemento D porque no es igual.

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

Realmente estoy buscando en una semana, pero aún así estoy obteniendo resultados incorrectos.

Si alguien tiene una idea, me alegraré por ello. Muchas gracias.

1
user10303165 9 sep. 2018 a las 23:00

3 respuestas

La mejor respuesta

La respuesta exitosa es buena, pero también difícil. Porque no necesita obtener artículos. El sistema operativo Android siempre puede igualar textos cortos o largos.

Reemplazar:

list_old.removeAll(list_new);

Para:

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

Obtendrás resultados correctos.

0
Selim Orhan 10 sep. 2018 a las 00:26

Puedes probar esto:

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

Debido a que el elemento "D" no está presente en list_new, removeAll no puede eliminarlo. Si necesita verificar si su lista contiene un elemento "C", puede hacer lo siguiente:

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

No necesita utilizar dos listas para eliminar todos los demás elementos.

0
Kenany 9 sep. 2018 a las 20:33

Obtienes una lista incorrecta porque estás igualando listas con listas. Hazlo así;

Cree un SQLite como su SQLite DBRecentlyHelper. Por ejemplo: DBOldListItems y DBOldListItems

Guarde todos los elementos en la nueva base de datos lo que dije e iguale elemento a elemento.

ARTÍCULOS ANTIGUOS:

A - B - C

NUEVOS ARTÍCULOS:

A - B - C - D

Ejemplo:

if(!olditems.get(i).item.equals(newitems.get(i)){
    olditems.get(i).item
}

Si, un elemento no es igual a la matriz newitems, obtendrá el resultado. Después de los resultados, puede actualizar sus elementos antiguos y puede hacer esto más, más, más.

Si no puede entender nada, contácteme. Quizás mi inglés no sea comprensible :)

0
Burcu Tarbil 9 sep. 2018 a las 20:55