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

如何从存储Model类对象的ArrayList中按姓名筛选元素并分类存储

你原有写法的错误主要是两点:

  1. 全量列表存储的是Model对象,直接调用contains("Joker")传入字符串永远匹配失败
  2. 没有在循环中逐个获取每个Model实例的name属性做匹配判断,也没有对不匹配的元素做分类存储。

实现步骤

1. 补充Model类的toString方法

要实现你需要的打印效果,首先需要在Model类中重写toString方法,自定义输出格式:

public class Model{
    String name;
    int age;

    public Model(){}
    public Model(String name, int age){
        this.name = name;
        this.age = age;
    }
    //已生成name和age对应的getter、setter方法

    // 新增toString方法
    @Override
    public String toString() {
        return "name = " + name + " age = " + age;
    }
}

2. 正确的分类逻辑实现

普通遍历写法(兼容性最好)

// 定义需要匹配的犯罪人员姓名集合,统一转小写实现大小写不敏感匹配
Set<String> crimeNameSet = new HashSet<>(Arrays.asList("joker", "morris"));
List<Model> crimeList = new ArrayList<>();
List<Model> normalList = new ArrayList<>();

for (Model item : arrayList) {
    // 取当前元素姓名转小写后匹配
    if (crimeNameSet.contains(item.getName().toLowerCase())) {
        crimeList.add(item);
    } else {
        normalList.add(item);
    }
}

Java8+ Stream写法(更简洁)

Set<String> crimeNameSet = new HashSet<>(Arrays.asList("joker", "morris"));
// 用partitioningBy直接将列表按匹配规则分成两组
Map<Boolean, List<Model>> classifyMap = arrayList.stream()
        .collect(Collectors.partitioningBy(item -> 
                crimeNameSet.contains(item.getName().toLowerCase())
        ));
List<Model> crimeList = classifyMap.get(true);
List<Model> normalList = classifyMap.get(false);

3. 打印输出

直接打印两个列表即可得到你需要的效果:

System.out.println("Crime list " + crimeList);
System.out.println("Normal List " + normalList);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:39:02