展开结构排序:按树状结构父节点排序,每个父节点的所有子节点排序
本次场景仅有两级,所以findChild并没有递归调用
首先取PID为空或为-1的数据,即所有的第一级节点,按指定排序字段OrderNum进行排序,排序完成后,查询每个节点的子节点,并进行流式合并后返回List
查询子节点findChild方法,根据传入父节点的ID作为PID条件查询,并将查询结果按排序字段OrderNum进行排序,排序后返回Stream
private static List<DealItemVO> sortDealItems(List<DealItemVO> dealItemVOs) {
return dealItemVOs.stream().filter(item -> ObjectUtils.isEmpty(item.getPid()) || "-1".equals(item.getPid())).sorted(Comparator.comparingInt(item -> item.getOrderNum()))
.flatMap(item -> Stream.concat(Stream.of(item), findChild(item, dealItemVOs))).collect(Collectors.toList());
}
private static Stream<DealItemVO> findChild(DealItemVO dealItemVO, List<ProductAndFundDetailVO.DealItemVO> dealItemVOs) {
return dealItemVOs.stream().filter(item -> !ObjectUtils.isEmpty(item.getPid()) && dealItemVO.getId().equals(item.getPid())).sorted(Comparator.comparingInt(item -> item.getOrderNum()));
}