我现在正在学习番石榴,但遇到了问题。我有三个可能的字符串过滤器。问题是我只想在字符串不是""
(空字符串)时过滤对象集合。我的另一个问题是如何从对象中过滤不同的成员,例如object.getName() == firstStringFilter
. 如果有人知道如何做到这一点,我将不胜感激。
解决方案
这就是我最终对我的代码所做的。如果我的 firstString 过滤器不为空,则应用该过滤器,与其他两个字符串过滤器相同。我正在使用相同的列表并用过滤器的结果覆盖它。
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);
}