【发布时间】:2021-05-25 20:45:43
【问题描述】:
我必须通过 categories 和 providers 方法插入不同类型的列表,我向它们插入 Provider 和 Category 类型。每次我想将类别或提供者添加到我的产品时,这些方法都会调用并接收来自我的服务类的输入。如果我评论categories 和providers 之一,我会测试它会很好,但他们都在课堂上我有Concurrent Modification Exception
我想知道如何解决它?
private List<Category> categories;
private List<Provider> providers;
public void addProvider (Provider p){
if(providers==null){
providers=new ArrayList<>();
}
providers.add(p);
}
public void addCategory (Category cat){
if(categories==null){
categories=new ArrayList<>();
}
categories.add(cat);
}
这是我的服务方法,我将其添加到此处,以便您更清楚地了解调用categories 和providers 方法。产品对象有一个类别列表和提供者列表。如您所见,我正在使用 jpa 和 springboot 进行开发
public void saveProduct(Product product){
Product postProduct=new Product();
postProduct.setCategories(product.getCategories());
postProduct.setName(product.getName());
List<Provider> tempo= product.getProviders();
Provider providerInstans=new Provider();
for(Provider p: tempo){
providerInstans.setName(p.getName());
providerInstans.setId(p.getId());
Provider po=providerRepository.findByName(providerInstans.getName());
postProduct.addProvider(po);
}
List<Category> temp=product.getCategories();
Category categoryInstance=new Category();
for(Category i:temp) {
categoryInstance.setName(i.getName());
categoryInstance.setId(i.getId());
// Category a=categoryRepository.findByName("phone");
String name = categoryInstance.getName();
System.out.println(name);
System.out.println("value" + categoryRepository.findById(1));
Category a = categoryRepository.findById(1);
postProduct.addCategory(a);
}
productRepository.save(postProduct);
}
【问题讨论】:
-
在遍历列表时不要修改它(在你的 for-each 循环中)。 (注意,最好将字段初始化为
new ArrayList<>(),而不是让它们为空并检查add方法;调用getProducts以返回空而不是空的代码更友好。)跨度> -
我不明白我需要更改哪一部分。可以请您发布需要更改的部分吗?
-
使用显式的
Iterator迭代列表,并通过迭代器进行添加。