Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

266
Vistas
java.util.Arrays.asList cuando se usa con removeIf arroja UnsupportedOperationException

Me estoy preparando para un examen OCPJP 8 para los próximos 2 meses y actualmente este me llamó la atención porque no entiendo por qué.

 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); } }

¡esto claramente va a compilar OK! pero cuando lo ejecute verá la excepción como esta

 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)

Necesito ayuda aquí para entender por qué el método asList no funciona con removeIf. Supongo que devolverá una instancia de ArrayList que implementa el método removeIf.

Cualquier respuesta será apreciada.

¡salud!

ACTUALIZACIÓN: 16 de abril de 2022 El error ya no ocurre, incluso si usa java.util.Arrays.asList, lo que noto es que

  • la última implementación de java 1.8* ya no usa la clase ArrayList interna, sino la clase del paquete java.util.
  • la interfaz List también tiene una implementación predeterminada ahora.
about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

java.util.Arrays.asList() produce una lista de la que es imposible eliminar elementos, por lo que genera un intento de eliminación.

Podrías envolverlo con ArrayList :

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

Actualizar

Arrays.asList() devuelve return new ArrayList<>(a); donde ArrayList no es java.util.ArrayList , sino java.util.Arrays.ArrayList (clase interna), que no permite la eliminación.

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda