java筛选树_递归算法应用——实体树过滤解析

本文介绍了如何使用Java实现实体树的过滤条件解析,特别是针对大量网络设备的情况。通过递归算法,将用户在前端选择的实体树转化为SQL过滤条件,涉及到同层节点OR连接、勾选节点AND连接等逻辑。并提供了TreeNode和TreeSqlTranslator类的代码示例。
摘要由CSDN通过智能技术生成

监控一个地区网络设备的性能指标,会通过报表或告警展现,报表或告警往往只关心部分设备,此时在数据查询中我们就会进行设备实体过滤。实体树过滤是一种常见的过滤方式,但是网络设备数量巨大,我们不可能在页面上加载所有实体,前台也就无法把用户选择的所有实体(叶子节点)传递到后台,这时候就不能简单的采用in条件来过滤选择实体,我们必须综合使用in,not in,=,!=来过滤实体。

树显然是一种递归的数据结构,那么解析它必然就要使用递归算法。

一、从例子开始

下图是一棵勾选了的网元实体树,从图上我们可以看出以下几点

1、 网元层级关系为 Prov

2、 实心方框为勾选节点,空心方框为去勾选节点;

3、 红色加粗节点为前台传递到后台的节点信息(json格式);

4、 右侧sql是根据前台传递的节点信息解析出来的实体过滤条件。

9d73dbb6f5da4993c21cd474c18d9646.png

二、算法归纳

1、 同层节点条件之间的关系为or;

2、 被勾选的节点与子节点条件之间的关系是and;

3、 去勾选的节点与子节点条件之间的关系是or;

4、 节点与父节点勾选状态相同,则不必解析该节点条件,直接解析子节点条件;

5、 节点与父节点勾选状态不同,先解析该节点条件,再解析子节点条件;

6、 节点没有子节点,则直接返回该节点条件。

三、递归算法原理

1、 算法重复被自身调用;

2、 存在出口条件。

显然,例子中每个节点的解析算法一致,并且节点递归嵌套,满足条件1;

出口条件为节点不存在叶子节点。

四、代码实现

1、 节点代码TreeNode

package com.coshaho.learn.recursion;

import java.util.List;

/**

*

* Node.java Create on 2017年5月19日 下午10:34:13

*

* 类功能说明: 树节点定义

*

* Copyright: Copyright(c) 2013

* Company: COSHAHO

* @Version 1.0

* @Author coshaho

*/

public class TreeNode

{

private String name;

private String type;

private boolean isCheck;

private List children;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值