자바 재 귀 를 이용 하여 분류 트 리 예제 코드 구현

타 오 바 오,경 동 등 각 백화점 을 방문 할 때 첫 페이지 는 보통 상품 분류 이 고 이 상품 의 분 류 는 모두 등급 관계 라 는 것 을 발견 할 수 있다.아래 그림 은 티몰 을 예 로 들 어 3 층 의 나무 모양 구조 로 나 뉜 다!!!

그렇다면 이런 종류의 나 무 는 어떻게 이 루어 졌 을 까?말 이 많 지 않 으 면 바로 코드 를 입력 하 세 요.
1.우선 상품 분류 표를 새로 만 들 고 필요 한 데 이 터 를 유지 합 니 다.

2.상품 유형 실체 만 들 기

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel("     ")
public class OrdersCategory implements Serializable {

	private static final long serialVersionUID = 1L;

 @ApiModelProperty(value = "    ")
 @TableId(value = "id", type = IdType.ASSIGN_ID)
 private Integer catId;

 @ApiModelProperty(value = "    ")
 private String name;

 @ApiModelProperty(value = "   id")
 private Integer parentCid;

 @ApiModelProperty(value = "  ")
 private Integer catLevel;

 @ApiModelProperty(value = "    [0-   ,1  ]")
 private Integer showStatus;

 @ApiModelProperty(value = "  ")
 private Integer sort;

 @ApiModelProperty(value = "    ")
 private String icon;

 @ApiModelProperty(value = "    ")
 private String productUnit;

 @ApiModelProperty(value = "    ")
 private String productCount;
}
3.카 테 고리 트 리 만 들 기

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel("        ")
public class OrdersCategoryVo extends OrdersCategory implements Serializable {

 private static final long serialVersionUID = 1L;

 @ApiModelProperty(value = "    ")
 List<OrdersCategoryVo> childrenCategoryList;
}
4.재 귀 논리 코드 작성

 /**
  *        
  * @return
  */
 @Override
 public List<OrdersCategoryVo> getCategoryTree() {
  //         
  List<OrdersCategoryVo> entityList = categoryMapper.getCategoryTreeAll();
  //            .   stream api
  List<OrdersCategoryVo> firstEntityList = entityList.stream()
  	.filter(categoryVo -> categoryVo.getParentCid().intValue() == 0)
  	.map((menu) -> {
   //         ,       ,                
   menu.setChildrenCategoryList( getChildrens(menu,entityList));
   return menu;
  } ).collect(Collectors.toList());
  return firstEntityList;
 }

 /**
  *        
  * @param root       id
  * @param all        
  * @return
  */
 private List<OrdersCategoryVo> getChildrens(OrdersCategoryVo root, List<OrdersCategoryVo> all) {
  List<OrdersCategoryVo> childrenList = all.stream()
  	.filter(categoryVo -> categoryVo.getParentCid().intValue() == root.getCatId().intValue())
  	.map(categoryVo -> {
   //          ,        ,       
   categoryVo.setChildrenCategoryList(getChildrens(categoryVo, all));
   return categoryVo;
  }).collect(Collectors.toList());

  return childrenList;
 }
논리 실현 에 대해 코드 에 주석 이 있 습 니 다.여기 서 사례 중의 stream 의 몇 가지 방법 을 간단하게 말씀 드 리 겠 습 니 다.
stream().filter:필터,조건 에 따라 집합 요 소 를 걸 러 냅 니 다.
stream().map:맵,집합 에 있 는 요 소 를 조작 하고 새로운 요 소 를 되 돌려 줍 니 다.
stream().collect(Collectors.toList()):작업 이 끝나 고 stream 흐름 이 저장 되 지 않 기 때문에 작업 이 끝 난 후의 집합 을 되 돌려 야 합 니 다.
5.전단 에 Element 의 트 리 컨트롤 렌 더 링 데 이 터 를 사용 합 니 다.

<template>
 <el-tree :data="data" :props="defaultProps" @node-click="handleNodeClick"></el-tree>
</template>

<script>
import { getCategoryTree } from '@/api/category'

export default {
 data() {
 return {
  data: [],
  defaultProps: {
   children: 'childrenCategoryList',
   label: 'name'
  }
 }
 },
 created() {
  this.getData();
 },
 methods: {
 handleNodeClick () {

 },
 getData() {
  getCategoryTree()
  .then(response => {
   this.data = response.data.data.list
  })
  .catch(() => {
   this.data = []
  })
 }
 }
6.프로젝트 시작 효과 보기

초학 전단,비교적 간단하게..............................................................
자바 재 귀 를 이용 하여 카 테 고리 트 리 를 실현 하 는 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 재 귀 실현 카 테 고리 트 리 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기