如何在ArrayList中对前两个对象与其余对象调用不同方法?
问题解答
嘿,我来帮你拆解这两个问题:
一、最简单的实现方式
首先得指出你现有代码里的一个小问题:materials.subList(0, 1)只会取到第一个元素,因为subList是左闭右开的区间(包含起始索引,不包含结束索引)。如果要取前两个元素,得写成subList(0, 2)。
最简单的实现思路是分两次遍历:专门处理前两个元素,再处理剩下的元素,代码清晰易读,也不容易出错。
示例代码1:分两次遍历
ArrayList<Material> materials = new ArrayList<>(); StyklisteMetodeKlasse.fillArray(materials); // 处理前两个元素 for (Material material : materials.subList(0, 2)) { int brugerInput = 0; // 临时变量,替换成你的实际输入值 material.setAmount(Material.calculatePlanks(brugerInput, material.getLength())); // 这里可以添加前两个元素需要调用的其他方法 } // 处理剩下的所有元素 for (Material material : materials.subList(2, materials.size())) { // 调用其余对象需要的不同方法 // 比如:material.someOtherMethod(); }
如果你偏好只用一个循环,也可以用普通for循环通过索引判断:
ArrayList<Material> materials = new ArrayList<>(); StyklisteMetodeKlasse.fillArray(materials); for (int i = 0; i < materials.size(); i++) { Material material = materials.get(i); if (i < 2) { // 前两个元素的处理逻辑 int brugerInput = 0; material.setAmount(Material.calculatePlanks(brugerInput, material.getLength())); } else { // 其余元素的处理逻辑 // material.otherMethod(); } }
二、关于方法调用的作用范围
你在增强for循环里对materialer(应该是拼写笔误,应该是material?)调用方法时,只会依次作用于当前循环到的单个对象,绝对不会一次性作用于所有对象。
比如你原来的代码里for(Material materialer: materials.subList(0, 1)),这个循环只会执行一次,仅处理列表里的第一个元素;如果改成subList(0,2),循环会执行两次,第一次处理第一个对象,第二次处理第二个对象——每次循环中的方法调用,都只针对当前迭代到的那个material实例,修改的是它的状态,和其他对象无关。
增强for循环本质上是迭代器的语法糖,每次循环都会从集合里取出下一个元素,你对这个元素的操作自然只限于它本身~
内容的提问来源于stack exchange,提问作者kristheman
相关产品推荐
相关产品推荐

