Ich möchte eine Liste gleichmäßig auf eine bestimmte Anzahl von Unterlisten verteilen. Zum Beispiel habe ich eine Liste mit den Elementen 1 bis 10 und ich möchte 3 Listen. Diese sollten wie folgt aussehen:Gleichmäßige Verteilung von Listen in Unterlisten in Java
SL1 -> {1, 2, 3, 4}
SL2 -> {5, 6, 7}
SL3 -> {8, 9, 10}
Wichtige: Was jede Liste enthält nicht relevant ist, das heißt SL1 könnte {1, 5, 7, 10}. Das Wichtigste ist, dass es 2 Listen mit Größe 3 und 1 Liste mit Größe 4 gibt.
Ich habe mehrere Dinge ausprobiert, einschließlich der Iterables.partition
, aber das wird nicht helfen.
Das einzige, was ich bin gekommen, sich mit das funktioniert ist:
public Iterable<List<Integer>> distributeEvenlyQueryListIntoLists(final LinkedList<Integer> bigList, final Integer numberOfSublists) {
List<List<Integer>> result = new ArrayList<>();
// Creates as many lists as needed
for (int i = 0; i < numberOfSublists; i++) {
result.add(new ArrayList<>());
}
while (bigList.iterator().hasNext()) {
for (int i = 0; i < numberOfSublists; i++) {
if (!bigList.iterator().hasNext()) {
break;
}
result.get(i).add(bigList.poll());
}
}
return result;
}
Der übergebene bigList
muss kein LinkedList
sein, es kann jeder Iterable
sein.
Ich hasse besonders die erste Schleife, wo ich die Unterlisten erstellen.
Danke!
Große Liebe diese, danke! Irgendwie konnte ich die erste Schleife loswerden? Es war tatsächlich, was mich am meisten von meiner ursprünglichen Lösung stört. – user3083022
@ user3083022 nicht wirklich. Du könntest ein wenig Magie verwenden, um es anders aussehen zu lassen, aber am Ende wirst du immer mit der Erstellung all dieser Listen-Instanzen enden. – Paul
Über welche Art von Magie sprichst du?Auch wenn es sich um einen externen Einzeiler handelt, würde ich es nehmen – user3083022