【发布时间】:2013-05-27 05:33:53
【问题描述】:
我有一个由对象填充的 ArrayList。
我的对象类名为Article,它有两个字段;
public class Article {
private int codeArt;
private String desArt;
public Article(int aInt, String string) {
this.desArt = string;
this.codeArt = aInt;
}
public int getCodeArt() {return codeArt; }
public void setCodeArt(int codeArt) {this.codeArt = codeArt;}
public String getDesArt() {return desArt;}
public void setDesArt(String desArt) { this.desArt = desArt;}
}
我想使用desArt 字段过滤我的列表,而对于测试,我使用了字符串“test”。
我使用了谷歌的 Guava,它允许我过滤 ArrayList。
这是我尝试过的代码:
private List<gestionstock.Article> listArticles = new ArrayList<>();
//Here the I've filled my ArrayList
private List<gestionstock.Article> filteredList filteredList = Lists.newArrayList(Collections2.filter(listArticles, Predicates.containsPattern("test")));
但此代码不起作用。
【问题讨论】:
-
怎么不工作?我敢打赌编译错误...
-
@fge 因为我正在使用字符串进行过滤,我没有使用对象的字段进行过滤,但我不知道该怎么做。
-
您需要实现自己的
Predicate,Predicates提供的那些(notNull()/isNull()除外)都无法以有意义的方式过滤您的对象。你读过Functional explained吗? -
我对 Guava 库并不熟悉,但我认为您需要使用 Predicate.compose(Predicate predicate, Function function)创建一个新函数来测试特定字段是否正确。我将在几分钟内发布一个带有某种确切解决方案的答案。但据我了解,这是你应该做的。
标签: java arraylist filtering guava