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()提供的列表之一的vendor项目,而是过滤vendor返回的项目之一的项目getProviderName()-当然 getProviderName()(大概!)不返回数组,所以你没有匹配。

HamcrestMatchers类文档提供了以下两个示例:

是在

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

hasItemInArray

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

(注意,您的代码正在调用 的另一个重载hasItemInArray,这相当于hasItemInArray(equalTo(vendor))- 这可能会让您更清楚您正在测试与您的vendor集合是否相等)。

于 2012-10-31T16:56:01.893 回答