Stream流进行树状数据展开结构排序

展开结构排序:按树状结构父节点排序,每个父节点的所有子节点排序

本次场景仅有两级,所以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()));
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容