private List<WorkPeriodResp> getChildren(WorkPeriodResp root, List<WorkPeriodResp> all) { return all.stream().filter(m -> Objects.equals(m.getParentCode(), root.getNodeCode())).peek( (m) -> m.setChildren(getChildren(m, all)) ).collect(Collectors.toList()); }
时间: 2024-04-20 10:25:59 浏览: 79
这段代码实现了一个递归函数 `getChildren`,用于获取给定根节点下的所有子节点。
函数接受两个参数:`root` 表示根节点,`all` 表示包含所有节点的列表。
函数使用 Java 8 的 Stream API 对 `all` 列表进行过滤操作,保留满足条件的节点。条件判断是通过 `Objects.equals(m.getParentCode(), root.getNodeCode())` 实现的,即判断节点的父节点代码是否等于根节点的代码。
在过滤之后,使用 `peek` 方法对每个满足条件的节点进行操作。操作中调用了递归函数 `getChildren(m, all)`,即传入当前节点和所有节点列表,以获取当前节点的子节点列表。然后,将子节点列表设置为当前节点的子节点。
最后,使用 `collect` 方法将过滤和操作后的节点列表收集起来,并作为结果返回。
综上所述,这段代码的作用是根据给定的根节点和包含所有节点的列表,递归地获取根节点下的所有子节点,并返回一个包含所有子节点的列表。
相关问题
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class TreeBuilder { public static List<Node> buildTree(List<Node> nodes) { Map<Integer, Node> nodeMap = new HashMap<>(); List<Node> rootNodes = new ArrayList<>(); // 将节点放入map中,方便查找 for (Node node : nodes) { nodeMap.put(node.getId(), node); } // 遍历节点,将每个节点挂在其父节点下 for (Node node : nodes) { Node parent = nodeMap.get(node.getParentId()); if (parent != null) { parent.addChild(node); } else { rootNodes.add(node); } } return rootNodes; } } class Node { private int id; private int parentId; private List<Node> children = new ArrayList<>(); public Node(int id, int parentId) { this.id = id; this.parentId = parentId; } public int getId() { return id; } public int getParentId() { return parentId; } public List<Node> getChildren() { return children; } public void addChild(Node child) { children.add(child); } } 这一段代码没有把节点按照父子节点的关系层层组装返回给我
这段代码实现了将一个列表中的节点按照父子关系组装成一棵树,并返回根节点列表。如果你想要得到一棵组装好的树,你需要调用 `TreeBuilder.buildTree()` 方法。例如:
```
List<Node> nodes = new ArrayList<>();
// 添加节点到 nodes 列表中
List<Node> rootNodes = TreeBuilder.buildTree(nodes);
```
其中,`rootNodes` 就是组装好的根节点列表。你可以遍历 `rootNodes` 中的每一个节点,通过 `Node.getChildren()` 方法获取其子节点列表,以此类推,就可以遍历整棵树了。
resultList.stream() .filter(result -> dealTimeMap.get(result.getId()) != null) .forEach(resultVO -> { resultVO.setDealTime(dealTimeMap.get(resultVO.getId())); // 子服务进行中的也设置进去 List<ServiceProcessVO> children = resultVO.getChildren(); if(CollectionUtils.isNotEmpty(children)) { children.stream() .filter(item -> item.getDealTime() == null) .forEach(item -> item.setDealTime(dealTimeMap.get(item.getId())) ); } });
这是一段 Java 代码。它首先使用 Java 8 的 Stream 对 `resultList` 进行过滤,将 `dealTimeMap` 中不存在的 `result` 排除掉。然后使用 `forEach` 方法对每个结果对象进行操作。对于每个结果对象,它从 `dealTimeMap` 中获取对应的处理时间,并将其设置到结果对象中。同时,它还会获取结果对象的子服务列表 `children`,对于子服务列表中的每个子服务对象,如果其处理时间为 null,那么它也会从 `dealTimeMap` 中获取对应的处理时间,并将其设置到子服务对象中。
阅读全文