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 教程。