Java遍历Zookeeper

求助想遍历zk,获取所有节点数据,怎么写一个方法获取呀。

在成员变量放置集合,实在浪费空间,并不优雅。想在方法上直接返回集合。求助,怎么优化代码。

或者给出一个可以遍历zk的参考方法。

package com.example.demo;
 
import java.util.ArrayList;
import java.util.List;
 
public class test {
    private List dataList = new ArrayList<>();
    /**
     * 递归遍历zk数据
     * @param path
     */
    public void backupData(String path){
        //1:根据path查询节点数据,得到nodeData
        //2:查询其子节点列表,得到childNodeList
        dataList.add(nodeData);
        if(chileNodeList==null ||chileNodeList.isEmpty()){
            return ;
        }
        //遍历子节点
        for(String node:chileNodeList){
            //3:拼接路径
            String childNodePath = path+"/"+node;
            //4:递归
            backupData(childNodePath);
        }
    }
}

 

zookeeper 的数据结构是个树状结构,这个问题本质是对树的遍历。我写了一个深度优先遍历,供题主参考。

package com.example.demo;

import java.util.ArrayList;
import java.util.List;

public class test {


    /**
     * 递归遍历zk数据
     * @param path
     */
    public void backupData(String path){
        List dataList = new LinkedList<>();
        //1:根据path查询节点数据,得到nodeData
        //2:查询其子节点列表,得到childNodeList
        appendNodeData(path,dataList);
        return dataList;
    }


    /**
    * 根据路径获取当前节点
    */
    private List appendNodeData(String path,List dataList){
        if(path != null){
             NodeData node = getNodeDataByPath(path);
             if(node != null){
                dataList.add(node);
                List<String> childPaths = node.getChildPaths();
                if(childPaths != null && childPaths.size() > 0){
                    childPaths.forEach((childPath) -> {
                         appendNodeData(childPath, dataList);
                    })
                }
             }
        }
        return dataList;
    }

}

 

您好,我是问答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题。

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~