我有一个包含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转换为数组,然后尝试遍历并找到匹配项。
答案 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);