当前位置: 首页 > 知识库问答 >
问题:

可重用的搜索方法

鲁炳
2023-03-14

我有一个Product类,其中包含名为(String)代码、(String)名称、(Double)价格和(Date)到期的字段,每个都有自己的getter和setter方法。我有另一个类ListProduct,它包含一个名为productList的字段List。下面是一个ListProduct类,我创建了一个方法来返回仅通过产品名称搜索的所有产品。

public List<Product> SearchItemByName(ListProduct list,
        String name) {

    List<Product> products = new ArrayList<Product>();
    for (Product prod : list.productList) {

        if (prod.getName().toLowerCase().contains(name.toLowerCase())) {
            products.add(prod);
        }
    }
    return products;
}

我需要知道的是如何使上述方法成为可重用的方法,不仅可以通过其名称搜索列表,例如使用lambda表达式或匿名方法。

共有2个答案

金霄
2023-03-14

您可以使用番石榴并传递给此方法谓词:

new Predicate<Product>() {
    @Override
    public boolean apply(Product input) {
        // here check for desired conditions
    }
};

然后,您可以使用Iterables来过滤您的收藏:

return Iterables.filter(productList, predicate);

所以你的方法看起来会像:

public List<Product> SearchItemByName(ListProduct list, Predicate<Product> predicate) {
        return Lists.newArrayList(Iterables.filter(list.productList, predicate));
}

searchItemByName(list, new Predicate<Product>() {
    @Override
    public boolean apply(Product input) {
        // here check for desired conditions
    }
});
陈德泽
2023-03-14

将条件重构为接口:

public interface ProductAccepter {
   public boolean accept(Product product);
}

public List<Product> searchItem(ListProduct list, ProductAccepter accepter) {
    List<Product> products = new ArrayList<Product>();
    for (Product prod : list.productList) {
        if (accepter.accept(prod))
            products.add(prod);
        }
    }
    return products;
}

然后调用它,您可以使用一个匿名类:

final String name = "foo";
List<Product> products = searchItem(list, new ProductAccepter() {
    public boolean accept(Product product) {
        return product.getName().toLowerCase().contains(name.toLowerCase());
    }
});
 类似资料:
  • 我编写了一个reindex方法,可以执行以下操作: 它确实起到了作用,但我现在确定,仅仅删除然后创建一个索引是否有意义。如何改进此方法?

  • 我有一个,它显示了一个包含的。我正在使用从SQL加载数据,所有数据都显示得很好。 我想知道的是,我的工具栏中有一个搜索图标在中膨胀,当用户单击它并输入数据时,它应该在中的中进行筛选。 我已经在中实现了,还实现了和方法。我只是不知道如何直接使用中的搜索来过滤中的。

  • 我有一堆pdf文件,有些是可搜索的常规pdf文件,有些是不可搜索的文件的扫描版本。我想提取每个pdf的内容。为了提取常规PDF的内容,我使用Apache Tika,为了从不可搜索的PDF中提取内容,我使用tesseract ocr。然而,我需要区分哪个pdf是nornal pdf,哪个不是。有办法吗?

  • 问题内容: 我编写了这个小型测试应用程序来演示该问题,即当用户按下键盘上的搜索按钮时,可搜索活动未启动。 我一直在遵循开发人员指南,但是从我的网络搜索中 发现,官方开发人员指南缺少一些要点。 从我的SO搜索(没有帮助): 参考1:通过在清单中的元素中添加标签来解决。我还查看了示例“用户字典”的清单(我不知道在哪里可以在线找到示例,或者我可以链接到它)。该标签在application元素中。 参考2

  • 我正在使用Hibernate Search/Lucene Intégration开发一个J2E应用程序。我索引文档(和其他实体),并希望对其进行不区分重音的搜索(内容和类的字段)。 这样做好吗?是否没有param或conf属性让FrenchAnalyzer忽略重音? 谢谢

  • 我编写了这个小型测试应用程序来演示问题,即当用户按下键盘上的搜索按钮时,可搜索的活动未启动。 我一直在关注开发人员指南,但从我的网络搜索中,发现官方开发人员指南遗漏了一些要点。从我的SO搜索(没有帮助): > < li> 参考1:通过在清单的元素中添加标记来解决。我还查看了示例“用户字典”的清单(我不知道在网上哪里可以找到示例,或者我会链接到它)。这个标签在application元素中。 引用2: