Groovy如何更简便地判断数组所有元素均包含指定子字符串
最优实现方案
Groovy 集合原生提供了every()方法,专门用于判断所有元素是否都满足指定条件,完全匹配你的需求,而且是短路求值:只要遍历到第一个不符合条件的元素就会直接返回false,不需要遍历完整个列表,比你当前用findAll再对比长度的方案效率更高,代码也更简洁。
示例代码如下:
// 符合条件的列表,返回true def is_true = ['tmp/mydir/file1', 'tmp/mydir/file2', 'tmp/mydir/file3'] def result1 = is_true.every { it.contains('tmp/mydir') } assert result1 == true // 存在不符合的列表,返回false def is_false = ['otherdir/file1', 'tmp/file2', 'tmp/file3'] def result2 = is_false.every { it.contains('tmp/mydir') } assert result2 == false
方案优势对比
你当前的findAll实现需要遍历完整个列表,把所有符合条件的元素筛选出来之后再对比数组长度,当列表元素量级较大时会有不必要的性能开销。而every()方法在遇到第一个不满足条件的元素时就会终止遍历,最坏情况(所有元素都符合条件)下才会遍历完整列表,性能表现更优,代码可读性也更强。
内容的提问来源于stack exchange,提问作者J_yang
相关产品推荐
相关产品推荐

