使用嵌套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
集合而不是内置流方法。
答案 0 :(得分:4)
您需要的是平面图,这会将X流流转换为x流。
使用流时,地图和平面地图是您的朋友
对于那些没有stream()方法但可迭代的东西,你可以这样做
StreamSupport.stream(iterable.spliterator(), false);
e.g。
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