Processing中遍历ArrayList对象并将属性存入数组的实现疑问
解决ArrayList遍历并提取属性到数组的问题
嘿,我来帮你捋清楚这个问题~你的两种写法都存在逻辑问题,我先帮你分析下,再给出正确的实现方式:
先说说你现有写法的问题
- 写法1的问题:你嵌套了两层循环,外层增强for循环每次拿到一个
bob对象,内层循环会把这个对象的name赋值给names数组的所有10个位置。结果就是遍历完整个ArrayList后,names数组里全是最后一个bob对象的name值,完全达不到“按顺序存入”的目的。 - 写法2的问题:
b[i].name是错误的语法,因为b是ArrayList中的单个bob对象,不是数组或者可通过索引访问的集合,所以不能用[i]去操作它,这会直接导致编译报错。
正确的实现方式
这里给你几种常用的正确写法,根据你的习惯选择就行:
方法1:增强for循环 + 计数器
用一个计数器来记录数组的当前索引,遍历每个bob对象时把name存入对应位置:
// 先初始化数组,长度和ArrayList的大小一致(如果确定是10个也可以写new int[10],但size()更通用) int[] names = new int[bob.size()]; int currentIndex = 0; for (bob b : bob) { names[currentIndex] = b.name; currentIndex++; }
方法2:普通for循环(通过索引访问)
直接用索引同时遍历ArrayList和数组,一一对应赋值:
int[] names = new int[bob.size()]; for (int i = 0; i < bob.size(); i++) { // 通过get(i)获取ArrayList中对应索引的bob对象 bob currentBob = bob.get(i); names[i] = currentBob.name; }
方法3:Java 8+ Stream API(简洁写法)
如果你的项目用的是Java 8及以上版本,可以用Stream一行搞定:
int[] names = bob.stream() .mapToInt(b -> b.name) // 提取每个对象的name属性转为int流 .toArray(); // 把流转为数组
额外的小建议
- 遵循Java命名规范:类名首字母要大写,比如
bob类应该改成Bob;ArrayList的变量名可以改成bobList,避免和类名混淆,提升代码可读性。 - 封装原则:如果
name是Bob类的私有属性,建议通过getter方法(比如b.getName())来访问,而不是直接访问成员变量,这是更好的编程习惯。
内容的提问来源于stack exchange,提问作者Running Bird
相关产品推荐
相关产品推荐

