我试图通过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);
请帮帮我。
您想要isIn
:
filter(having(on(CarProviderModel.class).getProviderName(),
isIn(vendor)),carprvds);
hasItemInArray
的作用与您想要的相反——它不是过滤getProviderName()
是vendor
的一个提供列表中的一个的项,而是过滤vendor
是getProviderName()
返回的一个项的项——当然getProviderName()
(可能!)不返回数组,所以您没有匹配项。
HamcrestMatchers
类文档给出了两者的示例:
isIn:
assertThat("foo", isIn(Arrays.asList("bar", "foo")))
hasItemInArray:
assertThat(new String[] {"foo", "bar"}, hasItemInArray(startsWith("ba")))
(注意:请注意,您的代码调用了hasItemInArray
的另一个重载,它相当于hasItemInArray(equalTo(vendor))
——这可能会让您更清楚地知道,您正在使用vendor
集合测试相等性)。