Android 关于model(bean)类的遍历

Android 关于model(bean)类的遍历

之前有写过 json和map的遍历 估计大家都知道 现在播出的是model的遍历

首先定义一个model类
public class Model {

    private String id;
    private int age;

    public Model(String id, int age) {
        this.id = id;
        this.age = age;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

据我所知 String 占用的空间比其他基本类型要大 那么我为什么要用String呢 一般情况下long类型就足够了 但是有时候项目快做完了 老大要在所有的id前面加上不固定的字母 = - = 我为什么要用String 懂了吧
接下来就上遍历的代码 这里只提示重要的
private void test() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        Model model = new Model("abc", 18);
        //获取指定类所有的变量的对象数组
        Field[] fields = model.getClass().getDeclaredFields();
        int length = fields.length;
        for (int i = 0; i < length; i++) {
            Field field = fields[i];
            String key = field.getName();//key表示这个变量的字符串
            String type = field.getGenericType().getTypeName();//获取到了key的类型
            Logger.e("type = " + type);
            String getMethodString = "get" + key.substring(0, 1).toUpperCase() + key.substring(1, key.length());//必须注意 substring 是左开右闭的
            if ("int".equals(type)) {
                int value = (int) model.getClass().getMethod(getMethodString).invoke(model);
                Logger.e("key = " + key + "\tvalue = " + value);
            } else if ("java.lang.String".equals(type)) {
                String value = (String) model.getClass().getMethod(getMethodString).invoke(model);
                Logger.e("key = " + key + "\tvalue = " + value);
            }
        }
    }
这里是自动抛出了异常 小伙伴们想要优雅点可得想想办法了
这里Field和type需要好好注意下 value的值使用反射获取的 最重要的一点是substring区间是左开右闭的 我是很容易忘记这个左开右闭的

代码注释的也很详细 根据需求慢慢封装吧 留下运行后的截图

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果你想遍一个 `QTreeWidget` 中的所有节点,可以使用 `QTreeWidget` 的 `invisibleRootItem()` 方法获取根节点,然后递归遍每个节点。 以下是一个遍所有节点并输出它们文本的示例代码: ```python def traverse_tree(tree_item): # 输出当前节点的文本 print(tree_item.text(0)) # 遍子节点 for i in range(tree_item.childCount()): child = tree_item.child(i) traverse_tree(child) # 获取根节点 root = tree_widget.invisibleRootItem() # 遍根节点下的所有节点 traverse_tree(root) ``` 其中,`traverse_tree()` 是一个递归函数,它接受一个 `QTreeWidgetItem` 对象作为参数。首先输出当前节点的文本,然后遍它的每个子节点并递归调用 `traverse_tree` 函数。 注意,在调用 `traverse_tree()` 函数时要传入根节点。 ### 回答2: QTreeWidget 是一个用于构建树形显示的控件,它是基于模型-视图模式的。要遍 QTreeWidget 中的所有模型(即树节点),我们可以使用递归的方法来实现。 首先,我们可以通过 QTreeWidget 的 topLevelItemCount() 函数获取顶层节点的数量。然后,使用 for 循环遍每一个顶层节点。 在循环中,可以使用 topLevelItem() 函数获取每一个顶层节点。接着,使用子节点数量的函数 childCount() 获取该顶层节点的子节点数量,同样可以使用 for 循环遍每一个子节点。 在子节点的循环中,可以使用 child() 函数获取每一个子节点。对于每一个子节点,我们可以使用 data() 函数获取其数据,该数据包括节点的文本和其他用户定义的数据。如果我们只关心节点的文本,可以使用 text() 函数直接获取节点的文本。 在遍完子节点之后,我们可以使用 QTreeWidgetItem 的 childCount() 函数判断该节点是否还有子节点。如果有,我们可以递归调用自身来遍下一层子节点,直到遍完所有节点为止。 最后,可以在每一层节点的循环之后执行其他操作,比如打印节点文本,将节点文本保存到一个列表中等等。 需要注意的是,如果 QTreeWidget 中有太多的节点,递归调用可能会导致栈溢出的问题。为了避免这种情况,可以考虑使用迭代方式或者遍模型的方法,比如使用 QTreeWidgetItemIterator。 总之,使用递归的方式可以遍 QTreeWidget 中的所有模型,并对每一个模型执行相应的操作。 ### 回答3: QTreeWidget 是Qt框架中的一个小部件,用于显示和编辑树结构数据。要遍所有模型(model)的话,首先我们需要了解QTreeWidget中的模型是如何组织的。 QTreeWidget的模型由一个根节点和其下的一组子节点组成,每个子节点又可以有自己的子节点。这个数据模型类似于树的数据结构。 遍QTreeWidget中的所有模型,可以使用递归遍的方法。以下是一个示例代码: ```python def traverse_model(item): if item is None: return # 打印当前节点的文本 print(item.text(0)) # 遍当前节点的子节点 for i in range(item.childCount()): child = item.child(i) traverse_model(child) # 遍QTreeWidget的所有根节点的子节点 for i in range(treeWidget.topLevelItemCount()): root_item = treeWidget.topLevelItem(i) traverse_model(root_item) ``` 以上代码定义了一个递归函数`traverse_model`,该函数接收一个节点作为输入,并递归遍该节点的子节点。在遍过程中,我们可以根据具体的需求对每个节点进行相应的处理,比如打印节点的文本或执行其他操作。 遍QTreeWidget的所有模型时,我们首先获取所有的根节点数量,并使用`topLevelItem`方法获取每个根节点。然后将每个根节点传递给`traverse_model`函数进行遍。 通过以上方法,我们可以遍QTreeWidget中的所有模型,并针对每个模型执行相应的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值