Java: 递归方式获取树状数据

java标志
image-3393

两个实体类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Order  {
  @Serial private static final long serialVersionUID = 1L;

  /** orderId */
  private Long orderId;

  /** 金额 */
  private Double orderPrice;

  /** 显示顺序 */
  @Excel(name = "显示顺序")
  private Long orderNum;

  /** 子数据: 不存数据库. */
  private List<Order> children = new ArrayList<>();

  /** 本级的数据: 不存数据库. */
  private List<OrderDetail> data = new ArrayList<>();
}


@Data
@NoArgsConstructor
@AllArgsConstructor
public class OrderDetail {
  @Serial private static final long serialVersionUID = 1L;

  /** 明细id */
  private Long detailId;

  /** 订单id */
  private Long orderId;

}

实现方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
  public List<Order> selectOrderList(long parentId) {
    // 所有父级数据列表.
    // 从数据库取数据.
    var parentList =
        orderMapper.selectOrderListByParentId(parentId);
    var orderList = selectChildData(parentList);
    orderList.sort(
        Comparator.comparingLong(Order::getOrderNum));
    return orderList;
  }

  private List<Order> selectChildData(
      List<Order> orderListParam) {
    List<Order> orderList = new ArrayList<>();
    for (var item : orderListParam) {
      var childList =
          orderMapper.selectOrderListByParentId(
              item.getOrderId());
      // 子项目
      item.setChildren(selectChildData(childList));
      // 获取明细数据
      OrderDetail OrderDetail =
          new OrderDetail();
      OrderDetail.setOrderId(item.getOrderId());
      // 从数据库获取明细数据
      item.setData(
          iOrderDetailService.selectOrderDetailList(
              OrderDetail));
      orderList.add(item);
    }
    return orderList;
  }

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

*

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据