티스토리 뷰

java

2차원 배열 filter

수학소년 2024. 11. 22. 22:59
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로 적긴 적었는데, 아니면 어떻게 적는지?

답을 알게되면 적어두자

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함