Java:捕获lambda异常

Him*_*dav 1 java lambda java-8

无法将流对象包装在一个try/catch block.

我试过这样的:

reponseNodes.stream().parallel().collect(Collectors.toMap(responseNode -> responseNode.getLabel(), responseNode -> processImage(responseNode)));
Run Code Online (Sandbox Code Playgroud)

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); }));
Run Code Online (Sandbox Code Playgroud)

更新的代码也不起作用.

Nth*_*tal 5

因为lambda不再是单个语句,所以每个语句(包括processImage(responseNode)必须后跟a ;.出于同样的原因,lambda也需要一个显式的return语句(return processImage(responseNode)),并且必须包含在内{}.

从而:

return reponseNodes.stream().parallel()
        .collect(Collectors.toMap(responseNode -> responseNode.getLabel(), responseNode -> {
            try {
                return processImage(responseNode);
            } catch (Exception e) {
                throw new UncheckedException(e);
            }
        }));
Run Code Online (Sandbox Code Playgroud)