OCPJP 8試験を次の2か月間準備していますが、現在、理由がわからないので、この試験で注目されました。
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);
を返します。ここで、ArrayList
は_Java.util.ArrayList
_ではなく_Java.util.Arrays.ArrayList
_(内部クラス)なので、削除できません。