无法将流对象包装在try/catch block
。
我试过这样:
reponseNodes.stream().parallel().collect(Collectors.toMap(responseNode -> responseNode.getLabel(), responseNode -> processImage(responseNode)));
Eclipse开始抱怨processImage(responseNode)
下划线并建议它需要Surround with try/catch
。
然后我更新到:
return reponseNodes.stream().parallel().collect(Collectors.toMap(responseNode -> responseNode.getLabel(), responseNode -> try { processImage(responseNode) } catch (Exception e) { throw new UncheckedException(e); }));
更新的代码也无效。
答案 0 :(得分:5)
因为lambda不再是单个语句,所以每个语句(包括processImage(responseNode)
必须后跟;
。出于同样的原因,lambda还需要一个显式的return语句({{1 }}),并且必须包含在return processImage(responseNode)
。
因此:
{}
答案 1 :(得分:2)
没有直接的方法来处理lambadas中的已检查异常,只有我想出的选项只是将逻辑移动到另一个可以使用 try-catch 处理它的方法。
例如,
List<FileReader> fr = Arrays.asList("a.txt", "b.txt", "c.txt").stream()
.map(a -> createFileReader(a)).collect(Collectors.toList());
//....
private static FileReader createFileReader(String file) {
FileReader fr = null;
try {
fr = new FileReader(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return fr;
}