在Java流中,map函数无法识别我的局部变量

时间:2018-09-20 08:46:17

标签: java-8 java-stream jsonnode

我正在尝试使用java流在jsonNode流内部进行搜索。有一次我收到一个ArrayNode,并使用类中的简单私有方法将其转换为JsonNodes列表。但是,当我想使用map fucntion映射节点时,我已经意识到局部变量(node;在第一张地图内部)为null。考虑到我是Java 8的新手,所以我不明白为什么以及如何解决此问题。我将代码发布在这里:

List<JsonNode> msgs = arrayNodeToListNode((ArrayNode) kmsResponse.at(kmsResponsePath));
        msgs.stream().forEach(t -> {
            List<JsonNode> jsonNodes = arrayNodeToListNode((ArrayNode) t.get("coverageList"));
            List<JsonNode> collect = jsonNodes.stream()
                    .map(node -> node.get("/coverage/coverageTypeLevel"))
                    .filter(node -> formule.equals(node.get("aggReference").textValue()))
                    .map(node -> t.get("premiumSplittedList"))
                    .map(node -> node.get("value")).collect(Collectors.toList());
            String value = collect.toString();
            response.append(collect);
        });

2 个答案:

答案 0 :(得分:0)

如果您的Log.d("Log", "video response error: " + error); Toast.makeText(getActivity(), "Uploading error", Toast.LENGTH_SHORT).show(); pBar.setVisibility(View.GONE); node,则与流或Java 8没有任何关系,只是您的null操作正在返回arrayNodeToListNode中的一些json节点清单。

错误(如果有)在null方法中。如果该方法返回包含一些arrayNodeToListNode元素的列表是有效的,则可以在使用null之前通过使用null来过滤掉Stream.map个变量:

Stream.filter(Objects::nonNull)

答案 1 :(得分:0)

事实上我已经解决了我的问题;我在intelliJ中调试我的应用程序时,遇到了一个事实,即在IntelliJ的调试器中,该节点为空。原因仅仅是因为我不知道要在调试器模式下添加断点,我需要选择\lambda而不是“ line”。

那是问题所在。实际上,一切都很好,没有空指针问题。实际上,我还有另一个带有过滤器的问题,当我发现intelliJ的调试器如何用于lambda表达式时,就解决了我的问题。最后,我得到了运行良好的代码:

StringBuilder response = new StringBuilder();
    List<JsonNode> msgs = arrayNodeToListNode((ArrayNode) kmsResponse.at(kmsResponsePath));
    List<JsonNode> collect1 = msgs.stream().filter(node -> {
                List<JsonNode> collect = arrayNodeToListNode((ArrayNode) node.get("coverageList")).stream()
                        .map(entry -> entry.at("/coverage/coverageTypeLevel"))
                        .filter(enttry -> formule.equals(enttry.get("aggReference").textValue())).collect(Collectors.toList());
                return collect.size() > 0;
            }

    ).collect(Collectors.toList());
response.append(collect1);

但是谢谢。