Spliterators并行无限循环

时间:2016-10-11 08:39:49

标签: java lambda functional-programming java-8 java-stream

我有一个迭代器,我会使用并行流来处理我的集合的每个条目。所以我写了这段代码

int sum = StreamSupport.stream(Spliterators.spliteratorUnknownSize(rowIterator, Spliterator.ORDERED), true)
                    .map(row -> insertDataFromExcel(row, user))
                    .mapToInt(Integer::intValue).sum();

因此,每个条目都由我的方法处理,如果条目存储在DB上,则返回1;如果在处理期间发生任何异常,则返回0。最后,我将每个int求和,以获得正确处理和存储的元素数。

insertDataFromExcel处理excel文件的每一行,使用Workbook org.apache.poi个包打开。所有解析阶段都运行正常,当我尝试将此实体保存到我的数据库时出现问题:在持久化实体之前,我通过一个简单的查询在我的数据库中找到了可能的重复。此查询使用JpaRepository执行。

上面的代码我的方法正确执行但是在执行后我进入了一个无限循环而我无法获得int值,更多的执行被锁定在这个代码点而不继续。

如果删除Spliterators的并行格式,则一切正常。

有什么建议吗?

0 个答案:

没有答案