기타/코드카타

중첩 반복문 조금더 깔끔하게 짜는방법

oiNeh 2022. 7. 28. 16:07

 2차원 배열을 아래와 같이 출력해야 할 때 어떤 코드가 좋을까 

for (int i = 0; i < arr.length; i++) {
   for (int j = 0; j < arr[i].length; j++) {
        System.out.print(arr[i][j] + " ");
   }
   System.out.println("");
}

각 값을마다 띄어쓰기 붙이고

1줄 끝날때마다 개행 추가도 해주는 코드이다 

 

자 우선 

for문 한문장 없애기 위해 Arrays.toString()을 사용해봤다

for (int i = 0; i < arr.length; i++) {
    System.out.println(Arrays.toString(arr[i]));
}

문제없이 잘 나가지만 

[] 괄호도 같이 출력이 되어 다른 방법을 모색을 해서 좀더 나은 방법을 찾았다

 

stream(). floatMap(). forEach()을 사용하는 것이다.

 

위 방식으로 바뀐 내코드를 보자 

Before:
    public void print(){
        for(int i=0;i<5;i++){
            System.out.println("");
        }
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j] + " ");
            }
            System.out.println("");
        }
    }

After:
    public void print() {
        System.out.print("\n".repeat(5));
        stream(arr).flatMap(this::newLineStream).forEach(System.out::print);
    }

    public <T> Stream<T> newLineStream(T[] array){
        System.out.print("\n");
        return stream(array, 0, array.length);
    }

Before 보단 After 코드가 더 예쁘지 않나 싶다.

 

추가적으로

newLIneStream 코드는 Arrays.stream() 를 참고해 만들었다. 

 

 

https://github.com/oiNeh/code-kata/blob/2578d3f45d70d6b4883cf699385db7cd36137819/korean-clock/src/main/java/code/kata/koreanclock/Korea.java                                                      

 

GitHub - oiNeh/code-kata: 코드카타

코드카타. Contribute to oiNeh/code-kata development by creating an account on GitHub.

github.com