mapNotNull, any, map

takeIf 는 조건이 true면 값 유지, false면 null 로 만든다.

map을 사용했기 때문에 요소 수는 그대로 3개가 유지됨.
→ 원소 형태만 바뀌는 것일 뿐, 필터링은 되지 않는다.

val regDates = infos
    .filter { it.id in actvieFranInfoIds }
    .map { it.regiDate }

val months = List<LocalDateTime?>.mapNotNull { it?.month }
	.toSet()  // 중복 제거

 

mapNotNull

null이 나오지 않는 값들로만 list를 구성해서 반환해주는 함수. (반환 타입이 List)

 

any, all, none 같은 boolean 연산용 함수

any 는 “조건을 만족하는 값이 하나라도 있는지” 검사할 때 쓰고,
map 은 “리스트의 원소 개수만큼 다른 값을 만들어낼 때” 쓰는 함수다.

문제는 “여러 개의 regiDate 중에서 현재 월만 단독으로 존재하는가?”를 판단하는 로직이었고,
이건 “목록에서 어떤 조건을 만족하는 값이 있는가?” 또는 “한 가지 조건으로 전체를 판단하는가?” 라는 문제이다.

 

 

  • map = 변환 (transformation)
  • any/all/none = 조건 평가 (boolean evaluation)

문제 자체가 “조건 평가”라서 map을 쓰면 불필요한 리스트가 만들어지고,
결국 다시 contains, all, size 검사 등을 해야 한다.

 

1) 여러 날짜에서 month만 추출 → 리스트

→ 이건 map이 필요

val months = dates.map { it.month } // 변환

2) 그 month 리스트를 검사 (현재 월만 있는지)

→ 이건 boolean 평가 → any/all/none 사용

val result = months.toSet().size == 1 && months.first() == nowMonth

 

변환이 필요하면 map

체크가 필요하면 any/all/none