如何将lambdaj与hamcrest匹配器(hasItemsInArray)一起用于筛选列表



我试图通过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的一个提供列表中的一个的项,而是过滤vendorgetProviderName()返回的一个项的项——当然getProviderName()(可能!)不返回数组,所以您没有匹配项。

HamcrestMatchers类文档给出了两者的示例:

isIn

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

hasItemInArray:

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

(注意:请注意,您的代码调用了hasItemInArray的另一个重载,它相当于hasItemInArray(equalTo(vendor))——这可能会让您更清楚地知道,您正在使用vendor集合测试相等性)。

相关内容

  • 没有找到相关文章

最新更新