Java遞歸實現評論多級回復功能

最近工作需要做一個評論功能,除瞭展示評論之外,還需要展示評論回復,評論的回復的回復,這裡就用到瞭遞歸實現評論的多級回復。

評論實體

數據庫存儲字段: id 評論id、parent_id 回復評論id、message 消息。其中如果評論不是回復評論,parent_id-1

創建一個評論實體 Comment

public class Comment {

    /**
     * id
     */
    private Integer id;

    /**
     * 父類id
     */
    private Integer parentId;

    /**
     * 消息
     */
    private String message;
}

查詢到所有的評論數據。方便展示樹形數據,對Comment添加回復列表

List<ViewComment> children

ViewComment結構如下:

// 展示樹形數據
public class ViewComment {
    /**
     * id
     */
    private Integer id;
    /**
     * 父類id
     */
    private Integer parentId;
    /**
     * 消息
     */
    private String message;
    /**
     * 回復列表
     */
    private List<ViewComment> children = new ArrayList<>();
}

添加非回復評論

非回復評論的parent_id-1,先找到非回復評論:

List<ViewComment> viewCommentList = new ArrayList<>();
// 添加模擬數據
Comment comment1 = new Comment(1,-1,"留言1");
Comment comment2 = new Comment(2,-1,"留言2");
Comment comment3 = new Comment(3,1,"留言3,回復留言1");
Comment comment4 = new Comment(4,1,"留言4,回復留言1");
Comment comment5 = new Comment(5,2,"留言5,回復留言2");
Comment comment6 = new Comment(6,3,"留言6,回復留言3");
//添加非回復評論
for (Comment comment : commentList) {
    if (comment.getParentId() == -1) {
        ViewComment viewComment = new ViewComment();
        BeanUtils.copyProperties(comment,viewComment);
        viewCommentList.add(viewComment);
    }
}

遞歸添加回復評論

遍歷每條非回復評論,遞歸添加回復評論:

for(ViewComment viewComment : viewCommentList) {
    add(viewComment,commentList);
}
private void add(ViewComment rootViewComment, List<Comment> commentList) {
    for (Comment comment : commentList) {
        // 找到匹配的 parentId  
        if (rootViewComment.getId().equals(comment.getParentId())) {
            ViewComment viewComment = new ViewComment();
            BeanUtils.copyProperties(comment,viewComment);
            rootViewComment.getChildren().add(viewComment);
            //遞歸調用 
            add(viewComment,commentList);
        }
    }
}
  • 遍歷每條非回復評論。
  • 非回復評論id匹配到評論的parentId,添加到該評論的children列表中。
  • 遞歸調用。

結果展示:

github 源碼

https://github.com/jeremylai7/java-codes/tree/master/basis/src/main/java/recurve

到此這篇關於Java遞歸實現評論多級回復的文章就介紹到這瞭,更多相關Java評論多級回復內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: