【问题标题】:Split list into "maximum" equal size chunks将列表拆分为“最大”大小相等的块
【发布时间】:2017-05-23 13:57:22
【问题描述】:

我有一个未评级项目的列表,我希望将它们分成 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));
                    }
                }

感谢任何建议/帮助

【问题讨论】:

    标签: java list split


    【解决方案1】:

    总是5折吗? 为什么不循环列表?像

    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=folds。所以,k 将被给出。但是,如果i=6,怎么可能做到folds[6].add(nonRatedItems.get(6));
    • folds[i%5].add(nonRatedItems.get(i));
    猜你喜欢
    • 2023-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多