Почему мой ArrayList всегда дает неверные данные, когда я использую содержит?

Имею 2 arraylist и сопоставляю их друг с другом. Первые несколько минут я получал хорошие результаты, но после этого всегда получал неверные результаты.

Код:

                    //Prapering lists for compare
                    ArrayList<String> list_old = new ArrayList<>(tinydb.getListString("list_old"));


                    for(String i: tinydb.getListString("list_old")) {
                        for(String j: tinydb.getListString("list_new")) {
                            if (i.contains(j)) {
                                list_old.remove(i);
                                break;
                            }
                        }
                    }

Что не так в этом коде?

Строка списка в TinyDB:

public ArrayList<String> getListString(String key) {
        return new ArrayList<String>(Arrays.asList(TextUtils.split(preferences.getString(key, ""), "‚‗‚")));
    }

Можете ли вы опубликовать, что такое списки? А какой пример плохих данных вы получите?

Dieter Kräutl 13.09.2018 13:10

Можете ли вы предоставить код для getListString?

TungstenX 13.09.2018 13:15

@TungstenX Я редактировал, пожалуйста, посмотрите.

Miss_Cristina 13.09.2018 13:26
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы снова загружаете свой список. Вам нужно не загружать его снова, а уже существующий.

for(String i : list_old) {
    for (String j: tinydb.getListString("list_new")) {
        if (i.contains(j)) {
            list_old.remove(i);
            break;
        }
    }
}

Приложение останавливается, когда я делаю это: E / AndroidRuntime: FATAL EXCEPTION: main Process: com.example.project, PID: 5980 java.util.ConcurrentModificationException

Miss_Cristina 13.09.2018 13:22

Тогда мы на один шаг ближе к решению вашей проблемы :) Вы должны показать нам, что такое tinydb и какова сигнатура метода getListString().

Danon 13.09.2018 13:24

Я редактировал @Danon

Miss_Cristina 13.09.2018 13:26

Вы запускаете этот код из нескольких потоков? Или с помощью parralelStream()?

Danon 13.09.2018 13:28

Это помещаемая строка: tinydb.putListString ("list_old", MyArrayList);

Miss_Cristina 13.09.2018 13:30

не останавливается, когда я делаю вот так: for (String i: new ArrayList <> (list_old)) {

Miss_Cristina 13.09.2018 13:33

ОНО не останавливается, потому что вы удаляете его из копии списка, а повторяете оригинал. Вы не работаете с одним и тем же экземпляром списка.

Danon 13.09.2018 13:34

Да вы правы, я нахожу это и исправляю. Спасибо :)

Miss_Cristina 13.09.2018 14:35

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