通过String在ArrayList中查找对象

时间:2018-03-29 23:26:44

标签: java arrays arraylist

我有一个包含Product对象的ArrayList。我现在尝试使用查询方法按字符串名称和字符串ID查找列表中的产品。 @ return我需要一个产品[]。

public Product [] findProducts(Lookup query)
    {
        int count = 0;``
        Product [] products = productsList.toArray(new Product[MAX_PRODUCTS]);
        for (int i = 0; i < this.nextProduct; ++i)
        {
            if (query.matches(this.products[i]))
            {
                ++count;
            }
        }
        Product [] selected = new Product[count];
        count = 0;
        for (int i = 0; i < this.nextProduct; ++i)
        {
            if (query.matches(this.products[i]))
            {
                selected[count++] = this.products[i];
            }
        }

        return selected;
    }

我首先将ArrayList转换为数组,然后尝试遍历并找到匹配项。

3 个答案:

答案 0 :(得分:0)

假设ID和名称是唯一值,您可以在下面开发这两个函数以进行搜索:

Product FindByID (int id, Product [] p) {
    for(int i=0; i<p.length; i++) {
       if(p[i].Id == id)
          return p[i];
    }
    return null;
}

Product FindByName (String name, Product [] p) {
    for(int i=0; i<p.length; i++) {
       if(p[i].Name.Equals(name))
          return p[i];
    }
    return null;
}

您可以使用上述功能:

Product p = FindByID(10);

这里,如果p不为null,那么你找到了项目..

答案 1 :(得分:0)

流应该允许非常快速地过滤和收集到数组:

productsList.stream()
            .filter(p -> query.matches(p))
            .toArray(Product[]::new);

答案 2 :(得分:0)

如果你想过滤使用Stream。使用List也比Array更容易

List<Product> result = input.stream() //your product input list
    .filter(product -> "XYZ".equals(product.name)) 
    .filter(product -> 1.equals(product.id)) 
    .collect(Collectors.toList());
result.forEach(System.out::println);