Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

270
Views
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.
over 4 years ago · Santiago Trujillo
1 answers
Answer question

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.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!