|  |  | 
 |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
 |  |  | import org.springframework.stereotype.Service; | 
 |  |  |  | 
 |  |  | import java.util.ArrayList; | 
 |  |  | import java.util.HashMap; | 
 |  |  | import java.util.List; | 
 |  |  | import java.util.Map; | 
 |  |  | import java.util.stream.Collectors; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  | 
 |  |  |     @Override | 
 |  |  |     public List<IvrLibaScriptAssortVO> selectIvrLibaScriptAssortList(IvrLibaScriptAssort ivrLibaScriptAssort) { | 
 |  |  |         List<IvrLibaScriptAssort> ivrLibaScriptAssorts = ivrLibaScriptAssortMapper.selectIvrLibaScriptAssortList(ivrLibaScriptAssort); | 
 |  |  |         //将pid为空的,过滤掉 | 
 |  |  | //        ivrLibaScriptAssorts = ivrLibaScriptAssorts.stream().filter(assort -> assort.getPid() == null).collect(Collectors.toList()); | 
 |  |  |  | 
 |  |  |         List<IvrLibaScriptAssortVO> ivrLibaScriptAssortVOS = DtoConversionUtils.sourceToTarget(ivrLibaScriptAssorts, IvrLibaScriptAssortVO.class); | 
 |  |  |         //遍历查出来的数据,通过 id=pid 获取他们的子数据 | 
 |  |  |         for (IvrLibaScriptAssortVO ivrLibaScriptAssortVO : ivrLibaScriptAssortVOS) { | 
 |  |  | //            if (ivrLibaScriptAssortVO.getPid() != null) { | 
 |  |  | //                continue; | 
 |  |  | //            } | 
 |  |  |             IvrLibaScriptAssort ivrLibaTargetAssort1 = new IvrLibaScriptAssort(); | 
 |  |  |             ivrLibaTargetAssort1.setPid(ivrLibaScriptAssortVO.getId()); | 
 |  |  |             List<IvrLibaScriptAssort> ivrLibaScriptAssorts1 = ivrLibaScriptAssortMapper.selectIvrLibaScriptAssortList(ivrLibaTargetAssort1); | 
 |  |  |             if (!Collections.isEmpty(ivrLibaScriptAssorts1)) { | 
 |  |  |                 ivrLibaScriptAssortVO.setIvrLibaScriptAssortList(ivrLibaScriptAssorts1); | 
 |  |  |  | 
 |  |  |         List<IvrLibaScriptAssortVO> rootList = new ArrayList<>(); | 
 |  |  |         Map<Long, IvrLibaScriptAssortVO> categoryMap = new HashMap<>(); | 
 |  |  |  | 
 |  |  |         // 建立id->对象的映射 | 
 |  |  |         for (IvrLibaScriptAssortVO category : ivrLibaScriptAssortVOS) { | 
 |  |  |             categoryMap.put(category.getId(), category); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         for (IvrLibaScriptAssortVO category : ivrLibaScriptAssortVOS) { | 
 |  |  |             if (category.getPid() == null || category.getPid() == -1) { | 
 |  |  |                 // 顶层节点 | 
 |  |  |                 rootList.add(category); | 
 |  |  |             } else { | 
 |  |  |                 // 找到父节点,并添加到其子节点列表 | 
 |  |  |                 IvrLibaScriptAssortVO parent = categoryMap.get(category.getPid()); | 
 |  |  |                 if (parent != null) { | 
 |  |  |                     IvrLibaScriptAssort sc = DtoConversionUtils.sourceToTarget(category, IvrLibaScriptAssort.class); | 
 |  |  |                     parent.getIvrLibaScriptAssortList().add(sc); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         return ivrLibaScriptAssortVOS; | 
 |  |  |         return rootList; | 
 |  |  |     } | 
 |  |  | } |