我试图从两个对象的匹配字段中删除arraylist中的重复元素。我有两个列表
List<SalesNotify> notifies=salesNotifyService.getAllNotify();
在这里,我从数据库中获取所有通知。第二个列表是
List<Event> events = new ArrayList<Event>();
events= salesNotifyService.getEventsFromGoogleCalendar();
在这里,我从谷歌日历API获取所有事件。
这里需要注意的一件事是从谷歌获取事件后,我正在迭代事件对象并将其设置为SalesNotify
for (Event event : events) { /* events obtained from second list.Here i am setting every event obtained from google to SalesNotify object fields */
SalesNotify salesNotify = new SalesNotify();
salesNotify.setEmployeeName(event.getSummary());
String date = event.getStart().getDateTime().toString();
String dateEnd = event.getEnd().getDateTime().toString();
salesNotify.setNotifyDate(date);
salesNotify.setNotifyEndDate(dateEnd);
salesNotify.setNotifyType("other");
salesNotify.setDumId(event.getId());
allNotifies.add(salesNotify);
}
我有第三个列表,我在这里添加这两个列表并发送它。这是第三个列表
List<SalesNotify> allNotifies = new ArrayList<SalesNotify>();
我正在添加从这样的数据库中获取的SalesNotify列表
for(SalesNotify notify : notifies){ /* notifies obtained from first list */
allNotifies.add(notify);
}
现在我要做的是我正在迭代SalesNotify列表和事件列表,并比较SalesNotify中的一个字段和事件列表中的一个字段,如下所示
for(SalesNotify notify : notifies) {
for(Event event : events) {
if (notify.getShortNote().equals(event.getSummary())) { /*for example both have data "testing" */
allNotifies.remove(event);
}
}
}
我将通知和事件列表添加到allNotifies并将其返回到前端进行显示。但是这里allNotifies.remove(事件)不起作用。我能够输入if循环,但它不是从列表中删除事件。我想要如果满足条件,则从allNotifies列表中删除事件。我想保留SalesNotify对象数据。现在它显示两次。任何人都可以告诉如何执行此操作?
如果使用for循环迭代List,它会在迭代期间锁定数组,并且在使用数组时不允许对数组进行任何修改。因此,如果使用for循环,则无法删除元素。如果您尝试从列表中删除元素,则会抛出ConcurrentModificationException。
相反,当迭代列表时,使用迭代器从列表中删除元素。它允许您删除元素而不会出现任何错误。
所以你有一个类型的List,但想要根据另一个类的一些常见属性删除元素?如果是这样,您是否考虑使用地图?使用您想要用作键的属性(如果您有多个属性,我会建议使用MultiKey)然后只需删除该键?如果你有多个具有相同键的元素,那么你可能还想使用MultiValuedMap。