对照值映射表验证JsonNodes列表(基于某些条件)的最佳方法是什么?

我有一个Map,其中包含对象的名称和ID。从我的服务中,我得到一个List,其中每个JsonNode都包含一个名称,并应包含一个ID。我想使用Map(具有权威性)来验证与JsonNode中的名称相对应的ID。例如:

JsonNode  Map
Mark 23   Mark 23
Chris 43  Chris 43
Ralph 21  Ralph 31

在这种情况下,前两个匹配,最后一个不匹配。我想遍历所有JsonNodes和Map并收集节点ID与Map ID不匹配的所有名称。

我可以使其与以下代码一起使用:

// stream all the nodes,filter the nodes with either no "id" or with an id <> expected,// collect into a list.
nodes.stream().filter(r -> {
            String name = r.get("name").asText();
            if (r.has("id")) {
                Long nodeId = r.get("id").asText();
                Long expectedId = map.get(name);
                if (expectedId == null) {
                    return false;
                }
                if (nodeId != map.get(name)) {
                    return true;
                } else {
                    return false;
                }
            } else { //no id in node
                return true;
            }
        }).map(r-> r.get("$id").asText()).collect(Collectors.toList());

列表中最多不超过2000个JsonNode,通常更少(parallelStream是一个好方法吗?如果使用parallelStream,我将创建自己的ForkJoinPool以更好地控制池的大小。如果不是parallelStream,那么期货(如CompletableFutures)会是更好的选择吗?

谢谢

kabenxiagu 回答:对照值映射表验证JsonNodes列表(基于某些条件)的最佳方法是什么?

处理大小为2000的列表应该不会花费很多时间,或者您可以像这样使用单个流

nodes.stream()
     .filter(r->r.has("id") && 
               !r.get("id").asText().equals(map.get(r.get("name").asText())))
     .map(r-> r.get("id").asText()).collect(Collectors.toList());

parallelStream,但并行流可以在执行期间消耗所有可用的处理器

nodes.parallelStream()
     .filter(r->r.has("id") && 
               !r.get("id").asText().equals(map.get(r.get("name").asText())))
     .map(r-> r.get("id").asText()).collect(Collectors.toList());
本文链接:https://www.f2er.com/2923394.html

大家都在问