Ich lerne gerade Guava und ich habe ein Problem. Ich habe drei mögliche String-Filter. Die Sache ist, dass ich nur die Objektsammlung filtern möchte, wenn die Zeichenfolge nicht ""
(leere Zeichenfolge) ist. Meine andere Frage ist, wie kann ich verschiedene Mitglieder von dem Objekt wie object.getName() == firstStringFilter
filtern. Wenn jemand weiß, wie man das macht, wäre ich wirklich dankbar.Filter-Objekt nur, wenn Prädikat Eingabe ist nicht die leere Zeichenfolge mit Guava
SOLUTION
Dies ist, was ich mit meinem Code schließlich tat. Wenn mein firstString-Filter nicht leer ist, dann wende diesen Filter an, und dasselbe gilt für die anderen beiden String-Filter. Ich verwende dieselbe Liste und überschreibe sie mit den Ergebnissen der Filter.
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);
}
Verwenden Sie Java 8? – shmosel