2017-12-08 8 views
0

이 플래그가 true로 설정되어있는 경우에만 필터를 적용하려면 플래그를 기반으로 필터를 적용, 내 현재 솔루션은 다음과 같습니다스칼라

val list = List(5,17,25,80) 
val checkAge = false 
val ageCheckedList = list.filter(i => i>18) 

아이디어는 checkAge가 true로 설정되어있는 경우, 필터해야 적용되지만 checkAge가 false 인 경우 필터링을 수행하지 마십시오.

무엇을 표현하기위한 간결한 방법이 있습니까? 내가 생각해 낸 최선은 다음과 같습니다.

ageCheckedList = list.filterNot(i => checkAge && i <= 18) 

이 말은 적어도 읽기에는 혼란 스럽습니다.

답변

1

나는 당신이 가진 것이 완벽하다고 생각합니다. 당신은 논리를 뒤바꿀 수 있고, 아마도 그것을 좀 더 가독성있게 만듭니다.

list.filter(i => !checkAge || i <= 18) 

기본적으로 이것은 우리가 나이를 확인하지 않았거나 나이가 범위 내에 있음을 나타냅니다.

0

더 명확하게 의도를 표현할 수있는 다음

val ageCheckedList = if (checkAge) list.filter(_ > 18) else list