GroovyのList#takeメソッドが便利

よく組むロジックだが、いつもしこしこコーディングしていた処理が組み込みメソッドで用意されてた。 とあるリストから、前方3件だけ取得したい。ただしリストが2件以下の場合はすべて返却。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#!/usr/bin/env groovy
def list = ["aaa", "bbb", "ccc", "ddd", "eee"]

def headEx(list, int n) {
    if (n-- > 0 && !list.empty) {
        return [list.head()] + headEx(list.tail(), n)
    } else {
        return []
    }
}

assert ["aaa", "bbb", "ccc", "ddd", "eee"] == headEx(list, 6)
assert ["aaa", "bbb", "ccc", "ddd", "eee"] == headEx(list, 5)
assert ["aaa", "bbb", "ccc"] == headEx(list, 3)
assert ["aaa", "bbb"] == headEx(list, 2)
assert ["aaa"] == headEx(list, 1)
assert [] == headEx(list, 0)
println "finish!"

List#take 使うと簡単に実現可能。

1
2
3
4
5
6
7
8
def list = ["aaa", "bbb", "ccc", "ddd", "eee"]
assert ["aaa", "bbb", "ccc", "ddd", "eee"] == list.take(6)
assert ["aaa", "bbb", "ccc", "ddd", "eee"] == list.take(5)
assert ["aaa", "bbb", "ccc"] == list.take(3)
assert ["aaa", "bbb"] == list.take(2)
assert ["aaa"] == list.take(1)
assert [] == list.take(0)
println "finish!"