小马真的菜 2021-03-18 10:33 采纳率: 100%
浏览 61
已采纳

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);
        }
    }
}
  • 写回答

2条回答 默认 最新

  • 关注

    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;
        }
    
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 logisim中设计一个位于十字路口的交通信号灯控制系统
  • ¥15 DispatcherServlet.noHandlerFound No mapping found for HTTP request with URI[/untitled30_war_e
  • ¥15 使用deepspeed训练,发现想要训练的参数没有梯度
  • ¥15 寻找一块做为智能割草机的驱动板(标签-stm32|关键词-m3)
  • ¥15 信息管理系统的查找和排序
  • ¥15 基于STM32,电机驱动模块为L298N,四路运放电磁传感器,三轮智能小车电磁组电磁循迹(两个电机,一个万向轮),怎么用读取的电磁传感器信号表示小车所在的位置
  • ¥15 如何解决y_true和y_predict数据类型不匹配的问题(相关搜索:机器学习)
  • ¥15 PB中矩阵文本型数据的总计问题。
  • ¥15 MATLAB卫星二体模型仿真
  • ¥15 怎么让数码管亮的同时让led执行流水灯代码