gpt4 book ai didi

java - 将此嵌套循环方法转换为 Stream Lambda 函数

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:01:45 25 4
gpt4 key购买 nike

给定以下带有嵌套 for 循环的方法:

private Set<PlanningItem> getPlanningItems(Set<JsonNode> nodes) {
Set<PlanningItem> planningItems = new HashSet<>();
for (JsonNode node : nodes) {
for (JsonNode planningItem : node.findPath(PLANNING_ITEMS.getValue())) {
planningItems.add(new PlanningItem(planningItem));
}
}
return planningItems;
}

我已经将它转换成嵌套的 forEach 方法,如下所示:

private Set<PlanningItem> getPlanningItems(Set<JsonNode> nodes) {
Set<PlanningItem> planningItems = new HashSet<>();
nodes.forEach(node -> node.findPath(PLANNING_ITEMS.getValue()).forEach(planningItem -> planningItems.add(new PlanningItem(planningItem))));
return planningItems;
}

我很好奇这是否可以使用嵌套流来完成,或者考虑到这个简单的结构以及我们正在使用没有内置流方法的 JsonNode 集合这一事实是否甚至是最佳的。

最佳答案

您需要的是一个平面图,它将把 X 流变成 x 流。

当使用流时,map 和 flatmap 是你的 friend

对于那些没有 stream() 方法但可以迭代的东西,你也可以这样做

StreamSupport.stream(iterable.spliterator(), false);

例如

nodes.stream() //stream of JsonNode objects
.flatMap(node -> StreamSupport.stream(node.findPath(PLANNING_ITEMS.getValue()).spliterator(), false)) //stream of JsonNode from the node.findPath
.map(planningItem-> new PlanningItem(planningItem)) //converts node to PlanningItem
.collect(Collectors.toSet()); //collects to a set

关于java - 将此嵌套循环方法转换为 Stream Lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50025504/

25 4 0