我知道 apache-commons 有一个名为 StringUtils 的实用程序类,它可以为您提供一个优雅的解决方案。
public boolean foo(String[] array, String pattern){
for(String content : array){
if(StringUtils.contains(content, pattern){
return true;
}
}
return false;
}
我不喜欢的一件事是它只会在第一个找到的实例时返回 true。我不完全确定您要尝试做什么,但如果您不关心数组中与模式不匹配的索引,我建议您使用名为 filter 的高阶函数。
Guava、lambdaJ 和 Apache-Commons 是支持函数式编程的库。
下面是一些应该在 Apache-Commons 中工作的 sudo 代码。
List<String> content = Arrays.asList(strArray);
Predicate matchesPattern = new Predicate("asdf"){{
private String pattern;
public Predicate(String pattern){
this.pattern = pattern;
}
@Overload
public boolean evaluate(Object input){
if(input instanceOf String){
StringUtils.contains((String)input, pattern
}
return false;
}
}};
CollectionUtils.filter(content, matchesPattern);
这样做是从列表中删除与模式不匹配的任何字符串。如您所见,声明 Predicate 对象有点冗长。如果您使用 Apache-Commons 或 Guava,它看起来会很相似,但这就是 lambdaJ 的用武之地。
谓词只是接受单个参数并返回布尔值的函数的术语,您之前可能已经在 Matcher 类中使用过它们。Hamcrest 拥有一些最好的 Matcher 库,因此 lambdaJ 只是围绕它构建了一个函数式编程库。它易于使用且可读性强。