자바에서 자료형 변환을 캐스팅이라고 한다.
기본형 또는 부모와 자식간의 관계인 경우 캐스팅을 활용할 수 있다.
그 외에는 String.valueOf와 같은 각 클래스의 메소드를 사용해야 한다.
List에서 배열로 전환
List에 담겨있는 제네릭과 변환되는 배열의 클래스가 같아야 한다.
List<String> array = new ArrayList<>();
1) for문을 사용
String[] arr = new String[array.size()];
int size = 0;
for(String item : array) {
arr[size++] = item;
}
List<Integer> list = new ArrayList<>();
int[] num = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
num[i] = list.get(i);
}
2) List의 메소드 활용
String[] arr = array.toArray(new String[array.size()]);
3) Stream 활용
String[] arr = array.stream().toArray(String[]::new);
String[] arr = Stream.of(array).toArray(new String[0]);
배열에서 List로 변환
String[] arr = new String[] {"a", "b", "c"};
1) for문을 사용
List<String> array = new ArrayList<>();
for (String item : arr) {
array.add(item);
}
2) Arrays의 메소드 사용
- List<String> array = Arrays.asList(arr);
- 이 경우에는 고정된 사이즈의 리스트를 리턴하여 add, remove와 같은 메소드를 사용할 수 없다.
- List<String> array = new ArrayList<>(Arrays.asList(arr));
- 이렇게 remove 메소드가 구현된 java.util.ArrayList로 감싸면 가능하다.
- Arrays.asList가 속한 java.util.arrays.ArrayList에는 remove가 구현되어 있지 않다.
- 그러나 이경우, 리스트를 순회하면서 특정 원소 삭제는 불가능하다
- ConcurrentModificationException 발생
- for문으로 인덱스를 이용해도, 삭제 시마다 리스트가 짧아져서 건너띄고 다음 인덱스를 체크.
- 컬렉션을 순회하면서 원소를 삭제하는 경우
- Iterator 인터페이스의 remove를 사용
- 자바8에서는 Collection 인터페이스에 removeIf 메소드 이용
- Stream의 filer 사용 (여기에 collect까지 쓰면 필터가 적용된 리스트를 얻을 수 있다)
3) Stream 활용
- List<String> array = Stream.of(arr).collect(Collectors.toList());
참고자료
'Language > JAVA' 카테고리의 다른 글
#오름차순, 내림차순 (0) | 2022.01.18 |
---|---|
#배열과 int/String : 자료형 변환 (0) | 2022.01.18 |
[프로그래머스] 자연수 뒤집어 배열로 만들기 (0) | 2022.01.18 |
[프로그래머스] 자릿수 더하기 + Stream참고자료 (0) | 2022.01.18 |
[프로그래머스] 이상한 문자 만들기 (0) | 2022.01.17 |