gpt4 book ai didi

java.util.Arrays.asList 与 removeIf 一起使用时抛出 UnsupportedOperationException

转载 作者:太空狗 更新时间:2023-10-30 19:37:15 28 4
gpt4 key购买 nike

我正在准备接下来 2 个月的 OCPJP 8 考试目前我这个引起了我的注意,因为我不明白为什么

public class BiPredicateTest {
public static void main(String[] args) {
BiPredicate<List<Integer>, Integer> containsInt = List::contains;
List<Integer> ints = java.util.Arrays.asList(1,20,20);
ints.add(1);
ints.add(20);
ints.add(20);
System.out.println(containsInt.test(ints, 20));

BiConsumer<List<Integer>, Integer> listInt = BiPredicateTest::consumeMe;
listInt.accept(ints, 15);

}

public static void consumeMe(List<Integer> ints, int num) {
ints.removeIf(i -> i>num);
ints.forEach(System.out::println);
}
}

这显然是要编译OK了!但是当你运行它时你会看到这样的异常

C:\Users\user\Documents>javac BiPredicateTest.java

C:\Users\user\Documents>java BiPredicateTest
true
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(AbstractList.java:161)
at java.util.AbstractList$Itr.remove(AbstractList.java:374)
at java.util.Collection.removeIf(Collection.java:415)
at BiPredicateTest.consumeMe(BiPredicateTest.java:22)
at BiPredicateTest.main(BiPredicateTest.java:17)

我在这里需要一些帮助来理解为什么 asList 方法不能与 removeIf 一起工作?我假设它将返回一个实现 removeIf 方法的 ArrayList 实例!

任何答案将不胜感激。

干杯!

更新:2022 年 4 月 16 日即使您使用 java.util.Arrays.asList,错误也不再发生,我注意到的是

  • 最新的 java 1.8* 实现不再使用内部 ArrayList 类,而是使用 java.util 包下的类。
  • List 接口(interface)现在也有默认实现。

最佳答案

java.util.Arrays.asList()生成一个无法从中删除元素的列表,因此它会抛出删除尝试。

你可以用 ArrayList 包装它:

List<Integer> ints = new java.util.ArrayList<>(java.util.Arrays.asList(1,20,20));

更新

Arrays.asList()返回 return new ArrayList<>(a);其中 ArrayList不是 java.util.ArrayList ,但是java.util.Arrays.ArrayList (内部类),不允许删除。

关于java.util.Arrays.asList 与 removeIf 一起使用时抛出 UnsupportedOperationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43020075/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com