Java 에서 List에서 특정 값을 제거하고 싶을 때 foreach를 사용하면 java.util.ConcurrentModificationException: null 라는 에러가 발생할 수 있다.


Example

List<Integer> 객체를 생성하여 몇가지 값들을 추가한 후에 foreach를 사용해서 Integer 의 값이 0이면 제거하도록 하는 간단한 예제 코드가 있다.

List<Integer> list = new ArrayList<Integer>();

// ... Add Integer elements in list

for (Integer i : list) {
        if(i==0) {
            list.remove(i);
        }
    }
}

실행해보면 에러가 발생한다.

java.util.ConcurrentModificationException: null
	at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901) ~[na:1.8.0_111]
	at java.util.ArrayList$Itr.next(ArrayList.java:851) ~[na:1.8.0_111]

Java Collection의 removeIf 를 사용하면 간단하게 해결할 수 있다.

List<Integer> list = new ArrayList<Integer>();

// ... Add Integer elements in list

list.removeIf( i -> i == 0 );

List의 removeIf 함수를 사용해서 매개변수로 ‘i가 0일 경우’‘라는 조건을 Predicate 인터페이스로 정의해주는 것으로 코드를 간단하게 작성할 수 있다.

hashed password로 Django User Model instance 생성하기

Django에서 제공하는 User를 상속 받아서 사용하고 있다. 테스트할 때 매번 User 객체를 생성하는 것이 번거로워서 RunPython을 이용하여 migrate 할 때 테스트를 위한 User model instance 를 생성했는데 pa...… Continue reading