2017-05-23 1 views
3

Ich habe eine Liste von nicht bewerteten Artikel und ich möchte sie in 5 Falten aufgeteilt werden. Momentan habe ich getan, wie ich gerade versuche, gleichmäßig in Stücke aufzuteilen und das letzte ist ein sogenannter "erweiterter" Brocken und dies verursacht Probleme für mich.Split-Liste in "maximale" gleiche Größe Brocken

Wenn ich nonRatedItems = {1,2,3,4,5,6,7,8} haben, dann die Stücke sind:

1 
2 
3 
4 
5 6 7 8 

ich dies vermeiden wollen, so dass der Ausgang ist:

1 6 
2 7 
3 8 
4 
5 

Stromquelle:

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

Alle Vorschlag/Hilfe wird geschätzt

Antwort

2

Ist es immer 5 Falten? Warum nicht die Liste roundrobin? etwas wie

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

Eigentlich wird es 'k' = Falten. Also wird "k" gegeben. Aber was ist, wenn 'i = 6 ', wie kommt es, dass es möglich ist,' falten [6] .add (nonRatedItems.get (6)); ' – Cap

+0

@CollinD natürlich, habe ich es verpasst –

+0

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