使用Java 6和Guava 12.0 我试图根据字符串列表是否具有特定的前缀来过滤它们。有没有办法不使用匿名类或为我想要的每个不同前缀使用单独的类?
这样可行,但它很丑陋(甚至更糟糕的是我的公司强加的格式我已删除)。
private String foo(String prefix, List<String> stuff) {
Collection<String> withPrefix = Collections2.filter(stuff, new Predicate<String>() {
@Override
public boolean apply(String input) {
return input.startsWith(prefix);
}
});
//...
}
当然,我可以做以下事情。
public class PrefixCheckForAA implements Predicate<String> {
@Override
public boolean apply(String input) {
return input.startsWith("AA");
}
}
public class PrefixCheckForZZ implements Predicate<String> {
@Override
public boolean apply(String input) {
return input.startsWith("ZZ");
}
}
如果没有匿名课程或一堆看似多余的课程,有没有办法做到这一点?
答案 0 :(得分:4)
我在写这篇文章时找到了一个解决方案,我简直不敢相信我这么傻也没想到......
只需使类具有需要String的构造函数,使用此String作为检查的前缀。
public class PrefixChecker implements Predicate<String> {
private final String prefix;
public Prefix(String prefix) {
this.prefix = prefix;
}
@Override
public boolean apply(String input) {
return input.startsWith(prefix);
}
}
答案 1 :(得分:3)
虽然您自己的解决方案完全有效,但您可以使用Guava库功能进一步减少代码:
Collection<String> withPrefix = Collections2.filter(stuff, Predicates.containsPattern("^AA"));
有关Predicates
所有功能的列表,请转到here。