有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何修复java lambda筛选器(缺少返回语句)与future

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

我得到了一个未来的集合,我想过滤掉集合中返回的假结果,但是使用lambda来报告(缺少return语句),我想得到一个类似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();

enter image description here

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


共 (2) 个答案

  1. # 1 楼答案

    所有执行路径中都必须有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();
    
  2. # 2 楼答案

    您可以一次性完成这项工作,并根据需要创建列表

    包括返回值以消除IDE警告

    List<Future<Map<String, Object>>> future =
            childIds.getChildOrder()
                    .stream()
                    .map(i -> service.submit(new Some(i)))
                    .filter(i -> {
                        try {
                            return Boolean.FALSE.equals(i.get().get("success"));
                        } catch (InterruptedException | ExecutionException e) {
                            e.printStackTrace(); //try to use a logger instead
                        }
                        return false;
                    })
                    .collect(Collectors.toList());
    

    我真的想看看你在这里想做什么。可能有一个更简单的方法