当前位置: 首页 > 面试题库 >

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

阙新觉
2023-03-14
问题内容

我正在为接下来的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实例!

任何答案将不胜感激。

干杯!


问题答案:

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);where
ArrayList不是java.util.ArrayList,而是java.util.Arrays.ArrayList(内部类),其中不允许删除。



 类似资料:
  • 我使用的Android MediaExtractor是这样的: 输入缓冲区由配置为AAC编码器的MediaCodec提供。目标是将wave文件转换为aac。当然,上面的代码是缩写的,但我一直跟踪到最后一行。 它也仅在将MediaExtractor与wav文件一起使用时发生。例如,我使用了一个。m4a,一切正常。 MediaExtractor的文档显示: MediaExtractor有助于从数据源中

  • 基本上,我想将格式为“hh:mm”的DateTimeFormatter应用于我从“zonedDateTime”获得的值。toLocalTime()'对象,并将其存储为LocalTime对象,这样我就可以获得像“08:00”这样的值。下面的代码显示了我如何获取特定时区的当前时间,我试图在格式化时将其转换为名为“currentTime”的LocalTime: 现在由于某种未知的原因,我从上面的最后一个

  • 这段代码实际上会崩溃Jasmine/Karma的整个执行,即使在原始堆栈跟踪中也会导致错误。 我认为如果可观察抛出并且无法处理它应该在它所在的上下文中传播该错误。否则,我无法测试可观察是否抛出。 此(茉莉花)测试将产生以下错误: 未捕获错误:CatchSubscriber.selector (slideshow.directive.spec.ts:224) 上的新错误 catchSubscribe

  • 我的适配器 我的持有者 类myHolder(itemView:View):recyclerview.viewholder(itemView){} 第二个 提前致谢

  • 我最近开始使用JMockit,对TDD和mocking非常陌生。我喜欢使用代码覆盖率来确保我已经测试了给定类/方法的所有行。 我在尝试JMockit(Delegate()功能)和代码覆盖率时遇到了以下错误。我包括通过和不通过的考试。 我不确定我是否做错了什么? 我想知道是否有其他人遇到过此问题,是否有任何解决方案或修复可用? 我甚至不确定这是JMockit问题还是EclEmma问题。谢谢 我的设置

  • 在嵌入式TomEE容器中运行Arquillian测试时,我得到了以下错误