Think Twice
IT技術メモ | Groovyのメモ
Created: 2008-12-11 / Updated: 2021-06-29

Groovyのループいろいろ


当メモは2008-12-11に投稿されたものを加筆修正し、再掲したものです。
当初の掲載からだいぶ時間が経過していますので、古い内容のものもあると思いますのでご注意下さい。
順次アップデートしていく予定です。

目次


はじめに

Groovyではループ処理がJavaより格段に便利になっている。ということでメモしておきます。
以下ソースはいずれも Groovy Version: 3.0.7 で動作確認を行いました。

forループ

昔ながらの

Copy
def array = [0, 1, 2, 3, 4]
for (int i = 0; i < array.size(); i++) {
    assert array[i] == i
}

for-inでループ

コレクションのループ

Copy
def array = [0, 1, 2, 3, 4]
def nums = ''
for (i in array) {
    nums += i 
}
assert nums == '01234'

範囲(Range)でループ

Copy
def nums = ''

// 0〜4
for (i in 0..4) {
  nums += i
}
assert nums == '01234'

nums = ''
// 0〜5より小さい
for (i in 0..<5) {
  nums += i
}
assert nums == '01234'

nums = ''
// 4〜0 (逆範囲)
for (i in 4..0) {
  nums += i 
}
assert nums == '43210'

nums = ''
// 4〜0より大きい (逆範囲)
for (i in 4..<0) {
  nums += i 
}
assert nums == '4321'

クロージャでループ

コレクションをループ

Copy
def array = [0, 1, 2, 3, 4]
def nums = ''

// 各要素ごとに繰り返し
array.each {
    nums += it
}
assert nums == '01234'

nums = ''
// 各要素ごとに逆順で繰り返し
array.reverseEach {
    nums += it
}
assert nums == '43210'

範囲(Range)を利用して

Copy
def nums = ''
// 範囲を直接eachで回す
(0..4).each {
    nums += it  
}
assert nums == '01234'

// 範囲はIntRangeクラス
def r = new IntRange(0, 4)
assert r == 0..4
nums = ''
r.each {
    nums += it  
}
assert nums == '01234'

繰り返し用のメソッドでループ

times

Copy
def nums = ''
10.times { nums += it }
assert nums == '0123456789'

upto, downto

Copy
def nums = ''
0.upto(9) { nums += it }
assert nums == '0123456789'

nums = ''
9.downto(0) { nums += it }
assert nums == '9876543210'

step

Copy
def nums = ''
0.step(8, 2) { nums += it }
assert '02468'

参考

元記事

関連記事

参考書籍