배열에서 변경 가능한 목록을 만드시겠습니까?
배열 List의 내용을 수정하기 위해으로 바꾸고 싶은 배열이 있습니다.
스택 오버플로는 주소가 있다는 질문 / 답변을 많이 가지고 Arrays.asList()그리고 그것은 단지 기본으로되는 배열의 목록보기를 제공하는 방법, 어떻게 결과 목록을 조작하려고 시도하는 것은 일반적으로 발생합니다 UnsupportedOperationException(예를 들어, 목록을 조작하기 위해 사용되는 방법으로 add(), remove()등)됩니다 에서 제공하는 List 구현에 의해 구현되지 않았습니다 Arrays.asList().
그러나 배열을 변경 가능한 목록으로 바꾸는 방법에 대한 예를 찾을 수 없습니다. 배열과 put()각 값을 새 목록으로 반복 할 수 있다고 가정 하지만이를 위해 존재하는 인터페이스가 있는지 궁금합니다.
한 가지 간단한 방법 :
Foo[] array = ...;
List<Foo> list = new ArrayList<Foo>(Arrays.asList(array));
그러면 변경 가능한 목록이 생성되지만 원래 배열 의 복사본 이됩니다. 목록을 변경해도 배열 은 변경 되지 않습니다 . 물론 나중에 사용하여 다시 복사 할 수 있습니다 toArray.
배열에 변경 가능한 뷰 를 생성 하려면 직접 구현해야한다고 생각합니다.
그리고 Google 컬렉션 API를 사용하는 경우
Lists.newArrayList(myArray)
Java 8에 포함 된 Stream API를 사용하는이 간단한 코드는 배열의 요소를 포함하는 변경 가능한 목록 (또는보기)을 만듭니다.
Foo[] array = ...;
List<Foo> list = Stream.of(array).collect(Collectors.toCollection(ArrayList::new));
또는 동일하게 유효합니다.
List<Foo> list = Arrays.stream(array).collect(Collectors.toCollection(ArrayList::new));
당신이 사용하는 경우 이클립스 컬렉션 (구 GS 컬렉션 ), 당신은 사용할 수 있습니다 FastList.newListWith(...)또는 FastList.wrapCopy(...).
두 방법 모두 varargs를 사용하므로 배열을 인라인으로 만들거나 기존 배열을 전달할 수 있습니다.
MutableList<Integer> list1 = FastList.newListWith(1, 2, 3, 4);
Integer[] array2 = {1, 2, 3, 4};
MutableList<Integer> list2 = FastList.newListWith(array2);
두 방법의 차이점은 배열이 복사되는지 여부입니다. newListWith()배열을 복사하지 않으므로 일정한 시간이 걸립니다. 배열이 다른 곳에서 변경 될 수 있다는 것을 알고 있다면 사용하지 않아야합니다.
Integer[] array2 = {1, 2, 3, 4};
MutableList<Integer> list2 = FastList.newListWith(array2);
array2[1] = 5;
Assert.assertEquals(FastList.newListWith(1, 5, 3, 4), list2);
Integer[] array3 = {1, 2, 3, 4};
MutableList<Integer> list3 = FastList.wrapCopy(array3);
array3[1] = 5;
Assert.assertEquals(FastList.newListWith(1, 2, 3, 4), list3);
참고 : 저는 Eclipse Collections의 커미터입니다.
myNewArrayList = new ArrayList<>(Arrays.asList(myArray));
Streams API를 사용하여 다른 옵션 추가 :
List<Foo> list = Arrays.stream(array).collect(Collectors.toList());
참고 URL : https://stackoverflow.com/questions/11659173/create-mutable-list-from-array
'Program Club' 카테고리의 다른 글
| 메모장 ++를 사용하여 ANSI 인코딩 파일을 UTF-8로 어떻게 변환합니까? (0) | 2020.11.30 |
|---|---|
| rspec을 사용하여 레일 3의 컨트롤러에 전달 된 매개 변수를 테스트하는 방법은 무엇입니까? (0) | 2020.11.30 |
| 차원의 "x"에 적합한 HTML 엔티티는 무엇입니까? (0) | 2020.11.30 |
| 새 선택적 매개 변수를 허용하도록 SQL 서버 함수 변경 (0) | 2020.11.30 |
| Twitter Bootstrap 캐 러셀 높이가 다른 이미지로 인해 화살표가 튀는 현상 (0) | 2020.11.30 |