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

Android开发:向List中添加未存在指定字段的Items对象

解决方案

首先先修正你给出的Items类里的小问题——set方法缺少参数,否则无法完成字段赋值,修正后的完整类如下:

public class Items {
    String item_id;
    String item_name;

    public Items() {}

    public Items(String item_id, String item_name) {
        this.item_id = item_id;
        this.item_name = item_name;
    }

    public String getItem_id() {
        return item_id;
    }

    // 修正:添加参数,否则无法给字段赋值
    public void setItem_id(String item_id) {
        this.item_id = item_id;
    }

    public String getItem_name() {
        return item_name;
    }

    // 修正:添加参数,否则无法给字段赋值
    public void setItem_name(String item_name) {
        this.item_name = item_name;
    }
}

接下来提供几种实现“仅当item_id未存在时添加对象到List”的方式,你可以根据场景选择:

方式一:基础遍历判断(适合小体量List)

这是最直观的实现,每次添加前遍历现有List,检查是否存在相同item_id的对象:

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Items> itemsList = new ArrayList<>();

        // 测试对象:第三个item_id重复
        Items item1 = new Items("001", "苹果");
        Items item2 = new Items("002", "香蕉");
        Items item3 = new Items("001", "红苹果");

        // 执行添加
        addIfIdNotExists(itemsList, item1);
        addIfIdNotExists(itemsList, item2);
        addIfIdNotExists(itemsList, item3);

        // 验证结果
        itemsList.forEach(item -> System.out.println(item.getItem_id() + ": " + item.getItem_name()));
    }

    private static void addIfIdNotExists(List<Items> list, Items newItem) {
        boolean isDuplicate = false;
        for (Items item : list) {
            // 注意:如果item_id可能为null,要先做空指针判断
            if (item.getItem_id().equals(newItem.getItem_id())) {
                isDuplicate = true;
                break;
            }
        }
        if (!isDuplicate) {
            list.add(newItem);
        }
    }
}

方式二:使用Stream API(Java 8+,代码更简洁)

利用Stream的anyMatch方法可以快速判断是否存在重复id,代码更简洁优雅:

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Items> itemsList = new ArrayList<>();

        Items item1 = new Items("001", "苹果");
        Items item2 = new Items("002", "香蕉");
        Items item3 = new Items("001", "红苹果");

        // 添加逻辑:通过Stream判断是否存在重复id
        if (!itemsList.stream().anyMatch(item -> item.getItem_id().equals(item1.getItem_id()))) {
            itemsList.add(item1);
        }
        if (!itemsList.stream().anyMatch(item -> item.getItem_id().equals(item2.getItem_id()))) {
            itemsList.add(item2);
        }
        if (!itemsList.stream().anyMatch(item -> item.getItem_id().equals(item3.getItem_id()))) {
            itemsList.add(item3);
        }

        // 验证结果
        itemsList.forEach(item -> System.out.println(item.getItem_id() + ": " + item.getItem_name()));
    }
}

方式三:借助Set辅助(大数据量场景更高效)

如果你的List会频繁添加对象或者体量较大,遍历的效率会很低。可以用一个Set<String>存储已存在的item_id,利用Set的O(1)查询特性大幅提升效率:

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Main {
    public static void main(String[] args) {
        List<Items> itemsList = new ArrayList<>();
        Set<String> existingIds = new HashSet<>();

        Items item1 = new Items("001", "苹果");
        Items item2 = new Items("002", "香蕉");
        Items item3 = new Items("001", "红苹果");

        // Set的add方法会返回boolean:true表示元素不存在已添加,false表示已存在
        if (existingIds.add(item1.getItem_id())) {
            itemsList.add(item1);
        }
        if (existingIds.add(item2.getItem_id())) {
            itemsList.add(item2);
        }
        // 这里add返回false,不会加入List
        if (existingIds.add(item3.getItem_id())) {
            itemsList.add(item3);
        }

        // 验证结果
        itemsList.forEach(item -> System.out.println(item.getItem_id() + ": " + item.getItem_name()));
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:28:25