将列表分成“最大”等大小的块

3

我有一份未评级的项目列表,我想将它们分成5组。目前,我已经尝试均匀地将它们分成块,并且最后一个块被称为“扩展”块,这给我带来了问题。

当我有nonRatedItems = {1,2,3,4,5,6,7,8}时,这些块是:

1
2
3
4
5 6 7 8

我希望避免这种情况,使输出结果为:
1 6
2 7
3 8
4
5

当前源:

    Collections.shuffle(nonRatedItems);
    nonRatedItems = nonRatedItems.subList(0, (int) Math.ceil(nonRatedItems.size() * 0.2));
    int tfoldSize = nonRatedItems.size() / 5;
    List<List<Integer>> negativeTestFolds = new ArrayList<List<Integer>>();
    if (tfoldSize < 1) {
        nonRatedItems.stream().map(Lists::newArrayList).collect(Collectors.toCollection(() -> negativeTestFolds));
                } else {
                    for (int i = 0; i < 5; i++) {
                        int endIndex = i < 4 ? (i + 1) * tfoldSize : nonRatedItems.size();
                        negativeTestFolds.add(nonRatedItems.subList(i * tfoldSize, endIndex));
                    }
                }

感谢您的支持和帮助,非常感激!

1个回答

2
它是否总是五倍?为什么不像轮流赛名单那样呢?例如:
List<Integer>[] folds = new List<Integer>[5];
for(int i = 0; i < 5; i++)
{
   folds[i] = new LinkedList<Integer>();
}

for (int i = 0; i < nonRatedItems.size(); i++)
{
   folds[i % 5].add(nonRatedItems.get(i));
}

实际上,这将是k倍。因此,k将被给定。但是,如果i=6,如何可能执行folds[6].add(nonRatedItems.get(6)); - Cap
folds[i%5].add(nonRatedItems.get(i)); - Cap

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接