Java:捕获lambda异常

时间:2015-12-06 06:11:34

标签: java lambda java-8

无法将流对象包装在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); }));

更新的代码也无效。

2 个答案:

答案 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;
}