我正在学习番石榴,我有一个问题。我有三个可能的字符串过滤器。问题是我只想在字符串不是""
(空字符串)时过滤对象集合。我的另一个问题是如何从像object.getName() == firstStringFilter
这样的对象中过滤不同的成员。如果有人知道如何做到这一点,我会非常感激。
解
这是我最终对我的代码所做的。如果我的firstString过滤器不为空,则应用该过滤器,并与其他两个字符串过滤器相同。我正在使用相同的List并用过滤器的结果覆盖它。
List<Field> fieldList = mLand.getFields();
if(!filterPattern.equalsIgnoreCase(""))
{
Predicate predicate = new Predicate<Field>()
{
@Override
public boolean apply(Field input)
{
return input.getName()
.toLowerCase()
.contains(filterPattern);
}
};
Collection<Field> result = Collections2.filter(fieldList, predicate);
fieldList = new ArrayList<>(result);
}
if(!cropStringPattern.equalsIgnoreCase(""))
{
Predicate predicate = new Predicate<Field>()
{
@Override
public boolean apply(Field input)
{
return input.getCrop().getName()
.toLowerCase()
.contains(cropStringPattern);
}
};
Collection<Field> result = Collections2.filter(fieldList, predicate);
fieldList = new ArrayList<>(result);
}
if(!varietyStringPattern.equalsIgnoreCase(""))
{
Predicate predicate = new Predicate<Field>()
{
@Override
public boolean apply(Field input)
{
return input.getCrop().getVariety().getName()
.toLowerCase()
.contains(varietyStringPattern);
}
};
Collection<Field> result = Collections2.filter(fieldList, predicate);
fieldList = new ArrayList<>(result);
}
答案 0 :(得分:0)
听起来你的对象不是字符串而是它们有字符串属性,所以这就像是
Iterables.filter(objects, new Predicate<MyObject>() {
@Override public boolean apply(MyObject object) {
return !object.getName().isEmpty(); // or whatever condition here
}
});
答案 1 :(得分:0)
您并不完全清楚自己要问的是什么,但似乎您正试图通过生成字符串的方法的结果来过滤集合。如果是这样的话,你应该可以使用这样的东西:
public static <T> Collection<T> filter(Collection<T> collection, String filter, Function<T, String> function) {
// assumes static import of com.google.common.base.Predicates.*
return Collections2.filter(collection, compose(not(equalTo(filter)), function));
}
现在你可以打电话了
filter(myCollection, "", new Function<MyClass, String>() {
@Override
public String apply(MyClass input) {
return input.getName();
}
)
它将从集合中过滤任何具有空名称的对象。
我假设您不使用Java 8.如果您愿意,那么您不会 真的需要谓词助手。你可以打电话
Collections2.filter(myCollection, obj -> !obj.getName().isEmpty())