解决ConcurrentModificationException

时间:2018-08-31 18:42:22

标签: java exception concurrentmodification

如标题中所述,我有一个sql = sql % tuple('?' * len(params)) TypeError: not enough arguments for format string ,我正在寻找解决问题的正确方法。

下面是引发异常的代码。但是,当我将ConcurrentModificationException更改为stream()时,错误消失了。是解决它的正确方法吗?

parallelStream()

提交方法:

@Override
    @Transactional
    public boolean submitAll(Long depId) {
        try {
            departmentService.findById(depId)
                    .getGroups()
                    .stream()
                    .flatMap(gr->gr.getSubgroups().stream())
                    .flatMap(sub->sub.getInvoices().stream())
                    .filter(Invoice::isActive)
                    .forEach(inv->invoiceService.submit(inv));
            return true;
        } catch (Exception ex){
            ex.printStackTrace();
            return false;
        }
    }

堆栈跟踪

@Override
    @Transactional
    public Invoice submit(Invoice invoice) {
        List<InvoiceItem> newItems = invoice.getItems();

        List<InvoiceItem> newInvoiceItems = newItems.stream().map(el->{
            InvoiceItem item = new InvoiceItem();

            item.setComponent(el.getComponent());
            item.setCategoryForPresentation(el.getCategoryForPresentation());

            List<InvoiceItem> subs = el.getSubItems()
                    .stream()
                    .map(sel->{
                        InvoiceItem subItem = new InvoiceItem();

                        subItem.setComponent(sel.getComponent());
                        subItem.setCategoryForPresentation(sel.getCategoryForPresentation());
                        subItem.setCurrency(sel.getCurrency());
                        subItem.setInvoiceCategory(sel.getInvoiceCategory());
                        subItem.setPurchaseType(sel.getPurchaseType());
                        subItem.setVendor(sel.getVendor());
                        subItem.setQuantity(sel.getQuantity());
                        subItem.setUnitPrice(sel.getUnitPrice());
                        subItem.setVersion(sel.getVersion()+1);

                        return subItem;
                    }).collect(toList());

            item.setSubItems(subs);

            item.setCurrency(el.getCurrency());
            item.setInvoiceCategory(el.getInvoiceCategory());
            item.setPurchaseType(el.getPurchaseType());
            item.setVendor(el.getVendor());
            item.setQuantity(el.getQuantity());
            item.setUnitPrice(el.getUnitPrice());
            item.setVersion(el.getVersion()+1);

            return item;
        }).collect(toList());

        List<InvoiceItem> all = new ArrayList<>();

        all.addAll(invoice.getAllItems());
        all.addAll(newInvoiceItems);

        invoice.setItems(all);
        invoice.increaseVersion();

        return update(invoice);
    }

预先感谢! :)

0 个答案:

没有答案
相关问题