Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

269
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda