递归方法,加载子项。 Java的

时间:2016-10-18 14:13:30

标签: java

我有一个具有属性"父亲"是他父亲的参考。 (在数据库中像这样) 现在我需要在视图中创建一个树,我必须递归地携带孩子。 我已经制作了下面的方法,但我把孩子加倍了。如果(最佳)正确的方式来完成这个过程并没有进一步。 有人可以帮助我。 谢谢。

@Transactional(readOnly = true) 
public Page<CategoriaDTO> findAll(Pageable pageable) {
    log.debug("Request to get all Categorias");
    Page<Categoria> result = categoriaRepository.findByPadreIsNull(pageable);
    List<CategoriaDTO> categoriaDtos = new ArrayList<>();

    for (Categoria categoriaAux : result) {
        CategoriaDTO categoriaDto = categoriaMapper.categoriaToCategoriaDTO(categoriaAux);
        categoriaDto.setHijos(categoriaMapper.categoriasToCategoriaDTOs(categoriaRepository.findByPadre(categoriaAux)));
        hijos(categoriaDto.getHijos(),categoriaDto.getId());
        categoriaDtos.add(categoriaDto);
    }

    return new PageImpl<CategoriaDTO>(categoriaDtos);
}

private void hijos(List<CategoriaDTO> hijos,Long padreId){
    Categoria categoriaPadre = categoriaRepository.findOne(padreId);
    if(! CollectionUtils.isEmpty(hijos)){
        for (CategoriaDTO hijo : hijos) {
            hijo.setHijos(categoriaMapper.categoriasToCategoriaDTOs(categoriaRepository.findByPadre(categoriaPadre)));
            hijos(hijo.getHijos(),hijo.getId());
        }
    }
}

1 个答案:

答案 0 :(得分:0)

据我所知,在您的实体中,您可以引用同一个实体。 所以你可以开始叶子然后上升到树上。以递归方式调用函数,直到Entity具有null parent(表示您已到达根目录)。您还可以将实体添加到列表中。

LinkedList<Category> list = new LinkedList<>();

public void getChildren(Category category) {
    list.add(category);
    if(category.getParent() == null) 
      return;

    getChildren(category.getParent());
}

这只是一个示例,发布您的实体以获取更多详细信息