본문 바로가기
Blog/TIL

[240614] stream, lombok

by 코젼 2024. 6. 14.
728x90
반응형

🔶stream

🔶lombok


목차

    / 오늘의 TIL /


    Stream

    stream 사용

    .collect의 groupingBy 속성을 통해 value로 묶고, value에 따른 개수를 mapping, counting()을 통해 구한다.

    {key, value} 형태의 값으로 리턴되고, 그 중 value를 다시 stream해서 .reduce를 통해 최종 값을 구할 수 있다.

    초기 변수 값은 1L이고, (x * (y + 1)) 를 구한 후, 최종 값에서 -1를 뺀다.

    import java.util.*;
    import static java.util.stream.Collectors.*;
    
    class Solution {
        /**
         * @param clothes 의상 배열[의상의 이름, 의상의 종류]
         * @return 서로 다른 옷의 조합의 수
         */
       public int solution(String[][] clothes) {
            return Arrays.stream(clothes)
                    .collect(groupingBy(p -> p[1], mapping(p -> p[0], counting())))
                    .values()
                    .stream()
                    .reduce(1L, (x, y) -> x * (y + 1)).intValue() - 1;
        }
    }

    stream 미사용

    import java.util.*;
    
    class Solution {
        /**
         * @param clothes 의상 배열[의상의 이름, 의상의 종류]
         * @return 서로 다른 옷의 조합의 수
         */
        public int solution(String[][] clothes) {
            
            Map<String, Integer> map = new HashMap<>();
    
            //의상 타입 별 개수 초기화
            for (String[] cloth : clothes) {
                map.put(cloth[1], map.getOrDefault(cloth[1], 0) + 1);
            }
    
            //옷을 고르는 경우 + 고르지 않는 경우 (의상 타입 별 옷 개수 + 1)
            int answer = 1;
            for (Integer value : map.values()) {
                answer *= (value + 1);
            }
            //최소 1개는 입어야 하므로, 안 입는 경우 제외
            return answer - 1;
        }
    }

    Lombok

    @RequiredArgsConstructor vs @AllArgsConstructor

    • @RequiredArgsConstructor: 초기화 되지 않은 final 필드와 @NonNull 어노테이션이 붙은 필드에 대한 생성자 생성
    • @AllArgsConstructor: 모든 필드에 대한 생성자 생성

    final 필드는 항상 초기화가 필요한 필드이다.

    @NonNull이 붙어있는 필드의 경우, 생성되는 생성자 내부에 해당 파라미터에 null check 로직이 생성된다.

     

    ⚠️ 생성자를 생성할 때, 필드 순서로 생성자 파라미터를 생성하므로 사용에 주의해야 한다.

    @Builder 어노테이션을 통해 이름으로 값을 설정해 이러한 오류 가능성을 없앨 수 있다.

    728x90
    반응형

    'Blog > TIL' 카테고리의 다른 글

    [240617] 트리  (0) 2024.06.17
    [240616] 문자열 자르기  (0) 2024.06.16
    [240613] java8 stream  (0) 2024.06.13
    [240612] swagger ui api 사용하기  (0) 2024.06.12
    [240611] 해시맵 활용  (0) 2024.06.11

    댓글