Groovy 列表 grep 函数
最后修改于 2025 年 2 月 25 日
Groovy 中的 grep 函数是一个通用的工具,用于过滤和搜索列表中的元素。它允许您选择满足特定条件的元素,例如模式、类型或自定义逻辑。本教程将通过 15 个实际示例介绍 grep 函数。
Grep 的基本用法
grep 函数根据条件过滤列表。它返回一个新列表,其中仅包含满足条件的元素。
def numbers = [1, 2, 3, 4, 5, 6]
def evenNumbers = numbers.grep { it % 2 == 0 }
println(evenNumbers)
此示例使用 grep 函数从列表中过滤偶数。
按类型过滤
您可以使用 grep 按特定类型过滤元素。
def mixedList = [1, "Groovy", 3.14, true, "Java"] def strings = mixedList.grep(String) println(strings)
此示例从混合列表中仅过滤字符串元素。
按正则表达式过滤
grep 可以过滤与正则表达式匹配的元素。
def words = ["apple", "banana", "cherry", "date"] def aWords = words.grep(~ /a/) println(aWords)
此示例过滤包含字母 "a" 的单词。
按范围过滤
您可以使用范围过滤特定范围内的元素。
def numbers = [10, 20, 30, 40, 50] def rangeFiltered = numbers.grep(20..40) println(rangeFiltered)
此示例过滤范围在 20 到 40 之间的数字。
按自定义条件过滤
您可以使用闭包定义自定义过滤条件。
def numbers = [1, 2, 3, 4, 5, 6]
def greaterThanThree = numbers.grep { it > 3 }
println(greaterThanThree)
此示例过滤大于 3 的数字。
过滤 Null 值
您可以使用 grep 从列表中过滤掉 null 值。
def mixedList = [1, null, "Groovy", null, 3.14]
def nonNullValues = mixedList.grep { it != null }
println(nonNullValues)
此示例从列表中删除 null 值。
按类过滤
您可以过滤属于特定类实例的元素。
def mixedList = [1, "Groovy", 3.14, true] def integers = mixedList.grep(Integer) println(integers)
此示例从混合列表中仅过滤整数值。
按多个条件过滤
您可以在闭包中组合多个条件进行过滤。
def numbers = [1, 2, 3, 4, 5, 6]
def filtered = numbers.grep { it % 2 == 0 && it > 3 }
println(filtered)
此示例过滤大于 3 的偶数。
按集合过滤
您可以过滤包含在另一个集合中的元素。
def numbers = [1, 2, 3, 4, 5, 6] def filterList = [2, 4, 6] def filtered = numbers.grep(filterList) println(filtered)
此示例过滤存在于另一个列表中的元素。
按带有索引的闭包过滤
您可以在过滤条件中使用元素的索引。
def numbers = [10, 20, 30, 40, 50]
def filtered = numbers.grep { it, index -> index % 2 == 0 }
println(filtered)
此示例过滤偶数索引处的元素。
按对象属性过滤
您可以根据对象的属性过滤对象。
class Person {
String name
int age
}
def people = [
new Person(name: "Alice", age: 30),
new Person(name: "Bob", age: 25),
new Person(name: "Charlie", age: 35)
]
def adults = people.grep { it.age >= 30 }
println(adults.name)
此示例过滤年龄为 30 岁及以上的个人。
按不区分大小写匹配过滤
您可以使用不区分大小写的匹配过滤字符串。
def words = ["Apple", "banana", "Cherry", "Date"] def aWords = words.grep(~ /(?i)a/) println(aWords)
此示例过滤包含 "a" 或 "A" 的单词。
按负面条件过滤
您可以过滤不满足条件的元素。
def numbers = [1, 2, 3, 4, 5, 6]
def notEven = numbers.grep { !(it % 2 == 0) }
println(notEven)
此示例过滤非偶数的数字。
按自定义对象过滤
您可以根据对象中的自定义逻辑过滤元素。
class Filter {
boolean isEven(n) { n % 2 == 0 }
}
def numbers = [1, 2, 3, 4, 5, 6]
def filter = new Filter()
def evenNumbers = numbers.grep(filter.&isEven)
println(evenNumbers)
此示例使用自定义对象过滤偶数。
按多个模式过滤
您可以过滤与多个模式中的任何一个匹配的元素。
def words = ["apple", "banana", "cherry", "date"]
def patterns = [~ /a/, ~ /e/]
def filtered = words.grep { word ->
patterns.any { word =~ it }
}
println(filtered)
此示例过滤包含 "a" 或 "e" 的单词。
使用 Grep 的最佳实践
- 使用描述性条件:编写清晰简洁的条件以提高可读性。
- 组合条件:使用逻辑运算符组合多个条件。
- 优化性能:避免对大型列表使用复杂条件以提高性能。
- 利用正则表达式:使用正则表达式进行强大的模式匹配。
来源
在本教程中,我们通过 15 个实际示例探讨了 Groovy 中的 grep 函数。grep 函数是过滤和搜索列表的强大工具,可以更轻松地处理 Groovy 中的集合。
作者
列出 所有 Groovy 教程。