2017-05-23 2 views
3

나는 등급이 매겨지지 않은 항목의 목록을 가지고 있으며 나는 5 배로 분할 되길 원합니다. 현재, 나는 단지 덩어리로 균등하게 분할하려고 시도하고 마지막 하나는 "확장 된"덩어리라고 불리는이 일은 나에게 문제를 일으킨다. 내가 nonRatedItems = {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 
3 
4 
5 6 7 8 

내가이 문제를 방지하려면 제안/도움을 환영합니다

답변

2

항상 5 배입니까? 왜 목록을 라운드 로빈하지 않습니까? something like

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)); 
} 
+0

실제로 'k' = 주름이 있습니다. 그래서'k'가 주어집니다. 그러나, 만약'i = 6'이라면, 어떻게'folds [6] .add (nonRatedItems.get (6));' – Cap

+0

@CollinD 물론 그것을 놓친 것일까 요 –

+0

'folds [i % 5] .add (nonRatedItems.get (i));' – Cap