티스토리 뷰
int[][] arr = {{1,1},{2,2},{3,3},{4,4},{5,5},{6,6}};
arr의 원소들 중 0번째 인덱스의 배열값이 홀수인 원소들만 거르고 싶음. 그니까
int[][] result = {{1,1},{3,3},{5,5}};
무지성으로 순수 배열만 사용한다고 하면 다음처럼 할 수 있을텐데,
int[][] arr = {{1,1},{2,2},{3,3},{4,4},{5,5},{6,6}};
// 배열length를 정해야 해서 길이 알아보기
int length = 0;
for (int[] each : arr) {
if (each[0] % 2 == 1) length++;
}
int[][] result = new int[length][];
int i = 0;
for (int[] each : arr) {
if (each[0] % 2 == 1) {
result[i] = each;
i++;
}
}
stream을 이용하면,
int[][] arr = {{1,1},{2,2},{3,3},{4,4},{5,5},{6,6}};
int[][] result = Arrays.stream(arr).filter(t -> t[0] % 2 == 1).toArray();
간단해 졌지만, 이대로 두면 컴파일에러가 남. toArray()의 return타입은 Object[]임.
Object[]를 int[][]로 cast할 수 없다고 나옴.
억지로 cast해줄 수 있음
int[][] result = (int[][]) Arrays.stream(arr).filter(t -> t[0] % 2 == 1).toArray();
근데 이게 문제임..
블로그에 남기는 이유가 이거임.
프로그래머스에서 코테문제 풀다가 cast를 했더니 에러 남.
구글링 하다 찾은 답은 toArray()의 parameter를 이용해서 return타입을 정할 수 있다고 함
int[][] result = Arrays.stream(arr).filter(t -> t[0] % 2 == 1).toArray(int[][]::new);
이렇게 해서 코테문제는 넘어갔는데,
여기서 또 생긴 문제가, double colon operator로 적긴 적었는데, 아니면 어떻게 적는지?
답을 알게되면 적어두자
'java' 카테고리의 다른 글
Arrays.asList로 만든 List 다루다가 java.lang.UnsupportedOperationException (0) | 2023.12.28 |
---|---|
[interview]객체지향 프로그래밍 (0) | 2023.05.16 |
[java]File 이동, 복사 (0) | 2022.11.23 |
[java]String[]의 indexOf (0) | 2022.11.02 |