我在for循环中有一个forEach循环,类似这样.
for (Iterator iterator = notLoadedFiles.iterator(); iterator.hasNext();) {
SwapReport swapReport = (SwapReport) iterator.next();
Reader reader = Files.newBufferedReader(Paths.get(swapReport.getFilePath()));
CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT);
List<CSVRecord> initList = csvParser.getRecords();
CSVRecord csvRecord = initList.stream().filter(record -> record.get(0).endsWith("@xxx.com")).findAny().orElse(null);
if (csvRecord != null) {
// partition the list
List<List<CSVRecord>> output = ListUtils.partition(initList, chunkSize);
// Set data by slice
output.stream().forEach(slice -> {
String inParams = slice.stream().filter(record -> !record.get(0).endsWith("@xxx.com")).map(record -> "'" + record.get(0) + "'").collect(Collectors.joining(",")).toString();
try {
// Retrieve data for one slice
setAccountData(inParams);
}
} catch (SQLException e) {
// How to break ?
}
});
}
}
forEach循环将执行setAccount方法。forEach循环内的try catch块是因为setAccount抛出SQLException。
我想做的是在出现异常的情况下从forEach循环中停止(中断)。
如果出现异常,内部循环将停止,for循环(外部循环)将继续执行迭代器中的下一个元素。
我怎么能那样做呢?
谢谢你
1条答案
按热度按时间6tdlim6h1#
不幸的是,函数
.ForEach()
没有提供一个好的方法来中断循环。虽然在这个循环中添加一个return
语句可以让.ForEach()
继续下一个循环,但我相信这不是你要问的。解决方案
因此,您可以尝试使用Java 9中引入的特性调用
.takeWhile()
。例如,代码将为:参考资料