Google Guava に入ったばかりで、強力なツールのように思えます。Predicates を使用して特定のプロパティでフィルター処理する方法がわかります。私の質問で述語を連鎖させる方法FluentIterableは、単一のプロパティをフィルタリングする最良の方法です。
たとえば、車のコレクションがあるとします。Cars.getPaintColor() をフィルタリングして、黒、赤、および黄色の車を取得するにはどうすればよいですか? 3 つの別個の述語を作成して FluentIterable を使用するのは、扱いにくいようです。特に私の使用では、同じプロパティに 10 個以上のフィルターが必要になる可能性があり、10 個の述語を作成したくありません。
ありがとうございます!
List<String> colorList = (List<String>)filterCriteria.get("Color");
List<String> makeList = (List<String>)filterCriteria.get("Make");
List<String> rimSizeList = (List<String>)filterCriteria.get("RimSize");
Predicate<String> predColor = Predicates.in(ImmutableSet.copyOf(colorList));
Predicate<CarObj> predDirection2 = Predicates.compose(predColor ,[????] );
Predicate<String> predMakeList = Predicates.in(ImmutableSet.copyOf(makeList));
Predicate<CarObj> predMakeList2 = Predicates.compose(predMakeList, [????] );
Predicate<String> predRimSize = Predicates.in(ImmutableSet.copyOf(rimSizeList));
Predicate<CarObj> predRimSize2 = Predicates.compose(predRimSize, [????] );
Collection<CarObj> filtered = FluentIterable.from(mAllCars)
.filter(predDirection2)
.filter(predMakeList2)
.filter(predRimSize2)
.toList();
リストを使用しているため、ImmutableSet を作成するときcopyOfに代わりに使用しました。of
構成の 2 番目のパラメーターに何を入力すればよいかわかりません。私はそれがこのようなものだと推測しています... CarObj クラスで。
static Predicate<CarObj> byColor= new Predicate<CarObj>() {
public boolean apply(CarObj input) {
// What do I put here?
}
};