如何在给定每个组的最大对象数(Java)的情况下,在组上平均分割一定数量的对象
我正在做一个学校的项目,其中我有一个带有对象的ArrayList。我必须在组(其他ArrayList)上平均分割这些对象,每个组的对象数量最大(maximumGroupSize) 如何分割这些对象,使它们均匀分布在组上,并在给定最大GroupSize的情况下使组的数量最少 我尝试了以下代码:如何在给定每个组的最大对象数(Java)的情况下,在组上平均分割一定数量的对象,java,Java,我正在做一个学校的项目,其中我有一个带有对象的ArrayList。我必须在组(其他ArrayList)上平均分割这些对象,每个组的对象数量最大(maximumGroupSize) 如何分割这些对象,使它们均匀分布在组上,并在给定最大GroupSize的情况下使组的数量最少 我尝试了以下代码: public List<List<Object>> createGroups(List<Object> objects, int maximumGroupSize) {
public List<List<Object>> createGroups(List<Object> objects, int maximumGroupSize) {
float totalObjectCount = objects.size();
float maxGroupSize = maximumGroupSize;
List<List<Object>> groups = new ArrayList<>();
for (int i = 0; i < java.lang.Math.ceil(totalObjectCount / maximumGroupSize); i++){
List<Object> group = new ArrayList<>();
for (int j = (i*maximumGroupSize); j < maximumGroupSize*(i+1);j++){
if (j<objects.size()) {
group.add(objects.get(j));
}
}
groups.add(group);
}
return groups;
}
公共列表createGroups(列表对象,int-maximumGroupSize){
float totalObjectCount=objects.size();
float maxGroupSize=maximumGroupSize;
列表组=新的ArrayList();
for(int i=0;i 如果(j如果您得到了拆分组允许的最大组大小,那么您可以使用该值来计算最小组数
这可以通过使用原始ArrayList的长度来完成。将原始列表中的对象数除以最大组大小,然后取此数字的上限以获得最小组数
例如,如果给你一个包含11个对象的ArrayList,你的最大组大小是2,那么你的最小组数是6
现在,您可以根据需要创建所需数量的ArrayList。获得这些ArrayList后,将原始列表拆分为这些列表应该非常容易。既然您现在提供了您尝试过的代码,下面是我之前没有发布的解决方案,因为您没有尝试:-
public static void main(String[] args) {
List<Integer> list = IntStream.range(10, 20)
.boxed()
.collect(Collectors.toList());
List<Integer> groups[] = createGroups(list, 4);
for (List<Integer> group : groups) {
System.out.println(group);
}
}
public static List<Integer>[] createGroups(List<Integer> list, int maximumPerGroup) {
int numberOfGroups = list.size() / maximumPerGroup;
if (list.size() % maximumPerGroup > 0) numberOfGroups++;
List<Integer> groups[] = new ArrayList[numberOfGroups];
for (int i = 0; i < list.size(); i++) {
if (groups[i % numberOfGroups] == null) groups[i % list.size()] = new ArrayList<>();
groups[i % numberOfGroups].add(list.get(i));
}
return groups;
}
你能发布你迄今为止创建的代码来尝试解决这个问题吗?我已经添加了我在上面尝试过的代码。在途中解决了一个问题,但仍然没有完成。谢谢你的帮助,我用它来创建问题中添加的代码。这对我来说很有效!谢谢你的解决方案。这正是我所需要的。
[10, 13, 16, 19]
[11, 14, 17]
[12, 15, 18]