我一直在尝试找到解决问题的方法,我有一个Foods调用数组foods,我想将其划分为数组数组 (foodsArray),因此每个数组包含 3 个Food对象。例如:[[Food1, Food2, Food3], [Food4, Food5, Food6]]我目前已经像这样实现了我的问题:Food[] foods = new Food[foodData.length]; //loaded in from a fileList<Food> foodsArray = new ArrayList<Food>();for(int i=0;i<foods.length;i+=5){ foodsArray.add(Arrays.copyOfRange(foods, i, Math.min(foods,i+5))); //error is here //Output System.out.println(Arrays.toString(Arrays.copyOfRange(foods, i, Math.min(foods,i+5))));}当前结果(foodsArray):[[Lcom.company.Food;@3c756e4d, [Lcom.company.Food;@7c0e2abd, [Lcom.company.Food;@48eff760, [Lcom.company.Food;@402f32ff]预期结果(foodsArray):[[com.company.Food@458ad742, com.company.Food@48eff760, com.company.Food@402f32ff], [com.company.Food@6d8a00e3, com.company.Food@548b7f67, com.company.Food@7ac7a4e4], [com.company.Food@5dfcfece]]
2 回答

九州编程
TA贡献1785条经验 获得超4个赞
那这个呢!您只需遍历数组并将其中三个添加到列表中,然后在每三个之后,将列表添加到另一个列表,重置初始列表。
ArrayList<ArrayList<Food>> result = new ArrayList<>();
ArrayList<Food> subArray = new ArrayList<>();
for (int i = 0; i < foods.length; i++) {
subArray.add(foods[i]);
if (i % 3 == 2) {
result.add(subArray);
subArray = new ArrayList<>();
}
}
很好很简单。正如 Nicholas K 建议的那样,我正在使用List<List<Food>>

慕神8447489
TA贡献1780条经验 获得超1个赞
迟到了,但这里是 Java 8 解决方案:
Food[][] partition(Food[] foods, int groupSize) { return IntStream.range(0, foods.length) .boxed() .collect(Collectors.groupingBy(index -> index / groupSize)) .values() .stream() .map(indices -> indices .stream() .map(index -> foods[index]) .toArray(Food[]::new)) .toArray(Food[][]::new);}
实际上,partition
该方法允许将数组划分为任意大小的组groupSize
。
如果出现问题,将通过调用获得所需的结果:
Food[][] result = partition(foods, 3);
添加回答
举报
0/150
提交
取消