如何用未来修复java lambda过滤器(缺少返回语句)

Oce*_*ean 4 java lambda

如何解决java lambda过滤器未来的集合?

我有一个未来的集合,我想过滤掉集合中返回的错误结果,但是使用 lambda 来报告(缺少返回语句),我想得到一个看起来像List<Map<String, Object>>. 我应该怎么做才能实现过滤?

List<Future<Map<String, Object>>> future = 
    childIds.getChildOrder()
            .stream()
            .map(i -> service.submit(new some(i)))
            .collect(Collectors.toList());

            future.stream().filter(i -> {
                try {
                    i.get().get("success").equals(Boolean.FALSE);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (ExecutionException e) {
                    e.printStackTrace();
                }
            }).findAny().get().get();
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

Map<String, Object>结构看起来像这样 {"success":"false", "msg":"I got error"}

Era*_*ran 5

您必须在所有执行路径中都有 return 语句:

future.stream().filter(i -> {
    try {
        return i.get().get("success").equals(Boolean.FALSE);
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }
    return false; // depending on what you wish to return in case of exception
}).findAny().get().get();
Run Code Online (Sandbox Code Playgroud)

  • 仍然令人担忧的是代码中的 Future `get` 和过滤器中的异常处理仍然是整个块的一部分,以及最后执行的 `get`!当然还有没有检查的`Optional.get`。 (2认同)
  • [旁白] 可读性:可以将 catch 块折叠为 `catch (InterruptedException | ExecutionException e) { e.printStackTrace(); 返回假;}` (2认同)