2

lambdajを介してベンダー配列にあるcaroffersオブジェクトのリストをフィルタリングしようとしています。しかし、以下のコードは機能しません。空のリストを取得しています。

    String[] vendor = {"FORD","TOYOTA"}; 
    List carsOffers=filter(having(on(CarProviderModel.class).getProviderName(),  hasItemInArray(vendor)),carprvds);

以下のコードが機能します。equalToだけが私のために働くようです。

    List carsOffers=filter(having(on(CarProviderModel.class).getProviderName(),  anyOf(equalTo(vendor[0]), equalTo(vendor[1]))),carprvds);

私を助けてください。

4

1 に答える 1

4

あなたが欲しいisIn

filter(having(on(CarProviderModel.class).getProviderName(), 
    isIn(vendor)),carprvds);

hasItemInArrayの逆のことをします-getProviderName()提供されたリストの1つであるアイテムをフィルタリングする代わりに、によって返されるアイテムの1つであるアイテムをvendorフィルタリングします-もちろん (おそらく!)配列を返しません、したがって、一致するものはありません。vendorgetProviderName()getProviderName()

HamcrestMatchersクラスのドキュメントには、両方の例が示されています。

isIn

assertThat("foo", isIn(Arrays.asList("bar", "foo")))

hasItemInArray

assertThat(new String[] {"foo", "bar"}, hasItemInArray(startsWith("ba")))

(注:コードがのもう1つのオーバーロードを呼び出していたことに注意してください。hasItemInArrayこれは、コレクションhasItemInArray(equalTo(vendor))との同等性をテストしていることが明確になる可能性がありますvendor)。

于 2012-10-31T16:56:01.893 に答える