Причина, по которой вы получаете java.lang.UnsupportedOperationException
при вызове retainAll
, заключается в том, что Arrays#asList
возвращает ArrayList, подкрепленный массивом фиксированного размера.Любая попытка удалить или добавить элемент в эти списки приведет к вышеупомянутому UnsupportedOperationException
.
Решение, как предложил @LuCio, заключается в том, чтобы обернуть деталь Arrays.asList
вызовом конструктора ArraysList следующим образом:
List<Integer> aList = new ArrayList(Arrays.asList(1,3,5,6,8));
List<Integer> bList = new ArrayList(Arrays.asList(10, 89, 8, 9));
, который вы должны вызывать:
aList.retainAll(bList);
Имейте в виду, что это изменит исходный список aList
.Если вам нужно сохранить состояние aList
, я бы предложил сделать копию aList
перед вызовом retainAll
.В этом случае может быть более подходящим один из предложенных потоковых API.