You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ArrayList中通过字符串查询Product对象并返回Product数组

补全并优化产品查询方法

看起来你已经搭好了查询方法的基本框架——先统计匹配产品的数量,再创建对应长度的数组来存放结果,只是第二个遍历的代码没写完对吧?我来帮你补全并给出更简洁的实现方案:

补全你原有思路的代码

按照你一开始的写法,只需要把第二个遍历逻辑补全,将匹配的产品存入目标数组即可:

public Product [] findProducts(Lookup query) { 
    int count = 0;
    // 先遍历统计匹配产品的数量
    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先收集所有匹配的产品,最后转成数组即可,代码可读性更高:

public Product[] findProducts(Lookup query) {
    List<Product> matchedProducts = new ArrayList<>();
    // 直接遍历存储Product的ArrayList
    for (Product product : productsList) {
        if (query.matches(product)) {
            matchedProducts.add(product);
        }
    }
    // 将List转成Product数组,传入new Product[0]会自动适配长度
    return matchedProducts.toArray(new Product[0]);
}

补充Lookup类的matches方法实现

你的代码里用到了query.matches(product),这里需要确保Lookup类的matches方法正确实现按name和id匹配的逻辑,比如支持“模糊匹配部分字段”(如果查询字段为null则忽略该条件):

public class Lookup {
    private String name;
    private String id;

    // 构造器、Getter方法
    public Lookup(String name, String id) {
        this.name = name;
        this.id = id;
    }

    public boolean matches(Product product) {
        // 如果查询的name不为空,则必须匹配产品name;为空则跳过该条件
        boolean nameMatch = (name == null || name.equalsIgnoreCase(product.getName()));
        // 同理处理id匹配
        boolean idMatch = (id == null || id.equals(product.getId()));
        // 同时满足name和id的匹配条件(如果有指定的话)
        return nameMatch && idMatch;
    }
}

这样你的查询方法就能根据传入的Lookup对象,精准匹配产品的name和id,返回符合条件的产品数组了。

内容的提问来源于stack exchange,提问作者user9170437

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:05:35