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 |
댓글