언어/Java

리스트 UnsupportedOperationException 에러

린예라 2023. 8. 30. 20:49

문제

리스트의 순서를 거꾸로 뒤집기 위해 다음과 같은 코드를 사용하던중 에러가 발생하였다.

List<PostResponseDto> responseList = responseList=postList.values().stream()
      .map(PostResponseDto::new).toList();
Collections.reverse(responseList);

위의 코드에서 UnsupportedOperationException 에러가 발생하였다.

Arrays.asList() 메소드를 통해 변환된 List에 데이터를 추가하거나 변경할 때 생기는 오류이다.

왜냐하면 Arrays.asList() 가 반환하는 값은고정크기의 List를 반환하기 때문이다. 일반적인 Arrays 배열이 아니라 Arrays 안에 있는 inner Class이기 때문이다. > 즉 변경 불가.

 

해결

List<PostResponseDto> responseList = new ArrayList<PostResponseDto>(responseList=postList.values().stream()
        .map(PostResponseDto::new).toList());
         Collections.reverse(responseList);

위와 같이 ArrayList()로 리스트를 변환하는 코드부분을 감싸서 일반적인 ArrayList()로 만들면 문제가 해결된다.

 

전에도 이걸로 한참 고민하다 겨우 해결했는데 이번에는 저번이랑 형태가 달라보여서 같은 오류인줄 몰라고 해맸다. 다음에 UnsupportedOperationException 오류를 보면 배열부터 확인해 봐야 겠다.

 

다시 해매지 않기위해 기록한다.