이중 배열을 생성해야 할 때, 총 길이가 얼마나 될 지 모르는 경우, List를 사용하여 문제를 해결하곤 한다.
이때 List, 즉 타입이 List<int[]> 인 녀석을 int[][]로 변경해주어야 할 때, 아래와 같이 변경해 줄 수 있다.
List<int[]> list = new ArrayList<>();
... // list 채우는 과정 생략
int[][] array = new int[list.size()][];
for (int i = 0; i < array.length; i++) {
array[i] = list.get(i);
}
나쁘지 않은 방법이지만, Stream을 사용하여 보다 간결하게 변경해 줄 수 있었다.
int[][] array = aList.stream().toList().toArray(new int[0][]);
하지만, stream()의 toList() 는 Java 17 버전 때 추가된 메소드로, 그 이전 버전에서는 사용할 수 없었다. (프로그래머스 등)
따라서 아래의 방식으로 변경하여 사용했어야 했다. 사용하기 위해서, java.util.stream.Collectors 를 import 해야한다.
int[][] aarr = aList.stream().collect(Collectors.toList()).toArray(new int[0][]);
단순히 변환을 위한 경우에는 상관이 없지만, 두 메소드 (toList()와 collect()) 사이에는 약간의 차이가 있긴 했다. 하지만 이 포스트의 내용과는 크게 관련이 없는 것 같았다.
toList()의 경우, 반환받은 List의 내용을 변경할 수 없지만, collect()의 경우 가능했다.
'Language > Java' 카테고리의 다른 글
[Java] Functional Interface (0) | 2023.10.24 |
---|---|
[Java] Google Java Style Guide 번역 (0) | 2023.10.17 |
[Java] JDK Java version 변경하기 (M1) (0) | 2023.09.25 |
[Java] 정규식 정리 (Regular Expression) (0) | 2023.09.21 |
[Java] Deque 알아보기 (0) | 2023.09.04 |