Как очистить один список значениями от другого

при выполнении данного кода , метод удланеия ничего не удаляет, не подскажите как это можно исправить

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);          // [] пустой список

Теперь удаление элементов (строк) работает корректно и список пустой.

→ Ссылка