ポイント
- リスト全体に各要素が幾つ含まれているかをカウントし、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時間程悩んみましたので、今後のためにメモいたしました。
以上です。