使用hamcrest和lambdaj基于多个输入比较对象

时间:2012-12-14 15:38:53

标签: java arrays search hamcrest lambdaj

我正在尝试过滤数组列表以删除与用户输入的一组条件不匹配的对象。该对象有3个列表。例如,见下文。

public class A {
    public String [] a={"a", "b", "c"};
    public String [] c={"a", "b", "c"};
    public String [] d={"a", "b", "c"};
}

我正在尝试编写一种搜索此对象的方法,以查看它是否与输入到搜索对话框中的数据相匹配。例如,我想要所有对象在数组a中有“a”,在数组b中有“c”,在数组c中有*。

    for(int i = 0; i < products.length; i++)
    {
        reactionData = select(reactionData, having(on(A.class).a,Every.everyItem(containsString(products[i]))));
    }

我想为每个搜索的数组做这样的事情,但似乎效率低下。更不用说每个搜索都会替换reactionData数组。

如果有人可以帮助我解决这个问题,或者让我指出一些有用的网站,解释如何利用lambdaj的hamcrest来理想。

修改

output = filter(having(on(Reaction.class).getChemicalProducts(), hasItems(products)), reactionData);

上述匹配器必须匹配产品中的每个项目。我正在寻找它以匹配产品中的任何项目

1 个答案:

答案 0 :(得分:0)

以下行将保留products列表中至少有一种化学产品的所有实例:

output = filter(having(on(Reaction.class).getChemicalProducts(), hasItem(isIn(products))), reactionData);