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
相关产品推荐
相关产品推荐

