scala의 filter류 예제이다.
filterNot은 filter의 expression의 !과 동일하다.
partition은 filter 와 filterNot을 합친 결과와 동일하다.
val list = List(1,2,3,4,5)
println(list.filter(x => x > 3)) // List(4, 5)
println(list.filterNot(x => x > 3)) // List(1, 2, 3)
println(list.filter(x => !(x > 3))) // List(1, 2, 3)
println(list.partition(x => x > 3)) // (List(4, 5),List(1, 2, 3))
println(list.filter(x => x > 3), list.filterNot(x => x > 3)) // (List(4, 5),List(1, 2, 3))
결과는 다음과 같다.
List(4, 5)
List(1, 2, 3)
List(1, 2, 3)
(List(4, 5),List(1, 2, 3))
(List(4, 5),List(1, 2, 3))
takeWhile과 dropWhile은 처음봤을 때 기억해도 잘 나지 않는데. 다시 해봐야 겨우 기억나는 익숙치 않은(?) api이다.
take는 처음 엘리먼트를 얻는다.
takeWhile은 take를 기반으로 생각하면 좋다.
takeWhile은 술어함수가 list의 엘리먼트가 참에서 시작해서 거짓이 되는 시점의 엘리먼트를 얻는다.
val list = List(19, 5, -1, 0, 4, 10, 30)
println(list.take(1)) // List(19)
println(list.takeWhile(x => x == 0)) // List()
println(list.takeWhile(x => x > 0)) // List(19, 5)
println(list.takeWhile(x => x == 19)) // List(19)
span은 takeWhile과 dropWhile를 하나로 결합한 함수이다.
val list = List(19, 5, -1, 0, 4, 10, 30)
println(list.span(x => x > 5)) // (List(19),List(5, -1, 0, 4, 10, 30))
println(list.takeWhile(x => x > 5), list.dropWhile(x => x > 5)) // (List(19),List(5, -1, 0, 4, 10, 30))
'scala' 카테고리의 다른 글
[scala] forall, for 예제 코드 (0) | 2017.06.30 |
---|---|
[scala] forall 표현식 (0) | 2017.06.30 |
[scala] mergesort(match) 예제 (0) | 2017.06.29 |
[scala] expansion of function value (0) | 2017.06.28 |
[scala] Boolean-ifThenElse (coursera 강의 발췌) (0) | 2017.06.28 |