我正在尝试过滤通过lambdaj在供应商数组中找到的caroffers对象列表。但是下面的代码不起作用。我得到空名单。
String[] vendor = {"FORD","TOYOTA"};
List carsOffers=filter(having(on(CarProviderModel.class).getProviderName(), hasItemInArray(vendor)),carprvds);
以下代码的作用。只有相同才能对我有用。
List carsOffers=filter(having(on(CarProviderModel.class).getProviderName(), anyOf(equalTo(vendor[0]), equalTo(vendor[1]))),carprvds);
请帮帮我。
答案 0 :(得分:3)
您想要isIn
:
filter(having(on(CarProviderModel.class).getProviderName(),
isIn(vendor)),carprvds);
hasItemInArray
与您想要的相反 - 而不是对getProviderName()
是vendor
提供的列表之一的项目进行过滤,而是对项目进行过滤其中vendor
是getProviderName()
返回的项目之一 - 当然getProviderName()
(大概是!)并没有返回数组,因此您没有匹配。
Hamcrest Matchers
class documentation给出了两者的例子:
<强>伊辛强>:
assertThat("foo", isIn(Arrays.asList("bar", "foo")))
<强> hasItemInArray 强>:
assertThat(new String[] {"foo", "bar"}, hasItemInArray(startsWith("ba")))
(注意,您的代码正在调用hasItemInArray
的另一个重载,这相当于hasItemInArray(equalTo(vendor))
- 这可能会让您更清楚地知道您正在测试与{{1}的相等性收集)。