我有一个名为items的对象,使用此类:
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(){
this.item_id = item_id;
}
public String getItem_name(){
return item_name;
}
public void setItem_name(){
this.item_name = item_name;
}
}
现在我想将此对象添加到List
,但我希望仅在(列表中没有其他具有相同item_id
的对象时)才添加该对象。
有些事情是这样的:
List<Items> item_list = new ArrayList():
Items item = new Items();
item.setItem_id("item_0001");
if(/*list doesn't have an object with this id*/){
item_list.add(item);
}
我想实现这一点,而不需要在每次添加新项目时循环遍历列表。
感谢。
答案 0 :(得分:0)
你最好使用其他数据结构,例如HashTable。没有循环(显式或隐式)通过它搜索List是没有办法的。
Map<String, Items> map = new HashMap<>();
Items item = new Items();
item.setItem_id("item_0001");
if(!map.containsKey(items.getItem_id())){
map.put(item.getItem_id(), item);
}
之后你可以简单地从地图中获取值:
List<Items> list = new ArrayList<Items>(map.values());
答案 1 :(得分:0)
您可以使用等于方法。让我举个例子。 For e.g.
在我的情况下,我有ProductListDataResponse
课程。您只需要关注此课程中的等于方法,并根据您的班级更改您的代码。
例如。
@Override
public boolean equals(Object obj) {
if (obj instanceof ProductListDataResponse) {
ProductListDataResponse productListDataResponse = (ProductListDataResponse) obj;
return productId.equals(productListDataResponse.getProductId());
} else return false;
}
我的ProductListDataResponse类:
public class ProductListDataResponse implements Serializable {
@SerializedName("thumbnail_image")
@Expose
private String thumbnailImage;
@SerializedName("actual_image")
@Expose
private String actualImage;
@SerializedName("product_id")
@Expose
private String productId;
@SerializedName("product_name")
@Expose
private String productName;
@SerializedName("product_description")
@Expose
private String productDescription;
@SerializedName("product_cost")
@Expose
private String productCost;
@SerializedName("category_id")
@Expose
private String categoryId;
@SerializedName("product_code")
@Expose
private String productCode;
public ProductListDataResponse(String productId) {
this.productId = productId;
}
public ProductListDataResponse(String thumbnailImage, String actualImage, String productId, String productName,
String productDescription, String productCost, String categoryId, String productCode) {
this.thumbnailImage = thumbnailImage;
this.actualImage = actualImage;
this.productId = productId;
this.productName = productName;
this.productDescription = productDescription;
this.productCost = productCost;
this.categoryId = categoryId;
this.productCode = productCode;
}
public String getThumbnailImage() {
return thumbnailImage;
}
public void setThumbnailImage(String thumbnailImage) {
this.thumbnailImage = thumbnailImage;
}
public String getActualImage() {
return actualImage;
}
public void setActualImage(String actualImage) {
this.actualImage = actualImage;
}
public String getProductId() {
return productId;
}
public void setProductId(String productId) {
this.productId = productId;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getProductDescription() {
return productDescription;
}
public void setProductDescription(String productDescription) {
this.productDescription = productDescription;
}
public String getProductCost() {
return productCost;
}
public void setProductCost(String productCost) {
this.productCost = productCost;
}
public String getCategoryId() {
return categoryId;
}
public void setCategoryId(String categoryId) {
this.categoryId = categoryId;
}
public String getProductCode() {
return productCode;
}
public void setProductCode(String productCode) {
this.productCode = productCode;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof ProductListDataResponse) {
ProductListDataResponse productListDataResponse = (ProductListDataResponse) obj;
return productId.equals(productListDataResponse.getProductId());
} else return false;
}
}
现在转到您要添加对象的班级。创建实例并传递id。如果Id存在,它将返回位置,否则它将返回-1。当值为-1时,表示值不存在,请立即保存。
for (int myCartIndex = 0; myCartIndex < myCartList.size(); myCartIndex++) {
MyCart myCart = myCartList.get(myCartIndex);
String productIdMyCart = myCart.getProductId();
ProductListDataResponse productListData = new ProductListDataResponse(productIdMyCart);
int index = productListDataResponseList.indexOf(productListData);
if (index == -1) {
//Add here your object.
}
}
答案 2 :(得分:0)
基本上,如果你想使用类似数组的数据结构,没有其他方法可以在没有循环的情况下执行此操作。甚至像List.contains()这样的类方法也使用迭代。您可以像其他答案建议的那样使用地图。或者,如果您不想修改现有数据结构,则可以使用Set。
List<Items> item_list = new ArrayList():
Set<String> item_set = new HashSet();
Items item = new Items();
item.setItem_id("item_0001");
if(!item_set.contains(item.getItem_id()))
{
item_list.add(item);
item_set.add(item.getItem_id())
}