カテゴリー
コンピューター

【Groovy】重複している要素をリストから取得するコード

ポイント

  • リスト全体に各要素が幾つ含まれているかをカウントし、2つ以上あればその要素は重複している、と考える。

重複している要素をリストから取得するコード

// Groovy Version: 2.4.12 JVM: 1.8.0_152 Vendor: Oracle Corporation OS: Windows 7
list = [["a", "a", "a"], ["a", "a", "a"], ["a", "a", "b"], ["a", "a", "c"], ["a", "a", "b"], ["a", "a", "b"]]
println "対象のリスト"
println list

println "重複無しかどうかを判定(重複無し: true, 重複有り: false)"
println list == list.unique(false)

println "重複を削除したリストを取得"
println list.unique(false)

println "重複する要素を抽出したリストを取得"
println list.findAll {
    // 同じ内容の要素の数が 1 個よりも多ければその要素は重複しているため、取得
    list.count(it) > 1
}.unique()

結果

// Groovy Version: 2.4.12 JVM: 1.8.0_152 Vendor: Oracle Corporation OS: Windows 7
対象のリスト
[[a, a, a], [a, a, a], [a, a, b], [a, a, c], [a, a, b], [a, a, b]]
重複無しかどうかを判定(重複無し: true, 重複有り: false)
false
重複を削除したリストを取得
[[a, a, a], [a, a, b], [a, a, c]]
重複する要素を抽出したリストを取得
[[a, a, a], [a, a, b]]

おわりに

重複を除くのであれば、unique() で一発ですけれども、何が重複しているかを取得する関数は Groovy にはありませんでした。

1時間程悩んみましたので、今後のためにメモいたしました。

以上です。

コメントを残す