Как очистить один список значениями от другого
при выполнении данного кода , метод удланеия ничего не удаляет, не подскажите как это можно исправить
List<String[]> l = new ArrayList<>();
List<String[]> l1 = new ArrayList<>();
final String s = "a,b,c";
final String s1 = "a,b,c,d";
l.add(s.split(",", -1));
l1.add(s1.split(",", -1));
System.out.println(Arrays.asList(l.get(0))); //[a, b, c]
System.out.println(Arrays.asList(l1.get(0))); //[a, b, c, d]
System.out.println(l.removeAll(l1)); //false
а если я использую метод retainAll то он очищает полность 2й список
System.out.println(l.retainAll(l1)); //true
Ответы (1 шт):
Автор решения: Sergey Zh.
→ Ссылка
Дело в том, что у вас список массивов строк List<String[]>, а чтобы удалять из него строки - должен быть список строк List<String>
Сейчас вы пытаетесь из списка массивов удалить другой список массивов. Но каждый массив это объект, у него своя ссылка, а поскольку ссылки разные - удаления не происходит.
Поэтому предлагаю переписать код следующим образом:
List<String> l = new ArrayList<>();
List<String> l1 = new ArrayList<>();
final String s = "a,b,c";
final String s1 = "a,b,c,d";
l.addAll(Arrays.asList(s.split(",")));
l1.addAll(Arrays.asList(s1.split(",")));
System.out.println(l); //[a, b, c]
System.out.println(l1); //[a, b, c, d]
System.out.println(l.removeAll(l1)); // теперь true
System.out.println(l); // [] пустой список
Теперь удаление элементов (строк) работает корректно и список пустой.