List<Integer> list1 = Arrays.asList(11, 22, 45);
List<Integer> list2 = Arrays.asList(33, 22, 55);
list1.retainAll(list2);
list1.stream().forEach(it -> {
System.out.println(it);
});
报错:
java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(AbstractList.java:161)
at java.util.AbstractList$Itr.remove(AbstractList.java:374)
at java.util.AbstractCollection.retainAll(AbstractCollection.java:410)
后来发现源码如下 此处返回的Arrays类的内部类ArrayList,和平时new ArrayList()不是同一个 所以对数据进行操作时候需要转为
ArrayList对象。
List<Integer> list1 = new ArrayList(Arrays.asList(11, 22, 45));
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
/**
* @serial include
*/
private static class ArrayList<E> extends AbstractList<E>{}