Angenommen, ich habe eine List<Object>
mit 100 Objekten in. Was ist der beste Weg mit Java 8 (ohne irgendeine Tiering-Bibliothek), um eine List<List<Object>>
zu bekommen, die 10 List
von 10 Object
enthält?Liste in Liste aufteilen
Antwort
es ist einfacher Guave mit (erwähnt Sie in Ihnen without any tierce library
poste ich diese setzen sowieso)
@Test
public void givenList_whenParitioningIntoNSublists_thenCorrect() {
List<Integer> intList = Lists.newArrayList(1, 2, 3, 4, 5, 6, 7, 8);
List<List<Integer>> subSets = Lists.partition(intList, 3);
List<Integer> lastPartition = subSets.get(2);
List<Integer> expectedLastPartition = Lists.<Integer> newArrayList(7, 8);
assertThat(subSets.size(), equalTo(3));
assertThat(lastPartition, equalTo(expectedLastPartition));
}
Sie benötigen eine externe final
Zähler, aber das scheint zu funktionieren.
// Must be final (or implicitly final).
AtomicInteger n = new AtomicInteger();
Map<String, List<Integer>> groups = IntStream.range(0, 100)
.boxed()
.collect(Collectors.groupingBy(
// Group by n/10.
o -> String.valueOf(n.getAndIncrement()/10)
)
);
Sie können PrimitiveIterator.OfInt verwenden, um AtomicInteger zu vermeiden. – richardstartin
@richardstartin - Nizza! Danke, ich war nicht auf "PrimitiveIterator" gestoßen. – OldCurmudgeon
Ich würde zuerst die Futtergröße nehmen (10 Elemente, in diesem Fall), und dann die Liste durchgehen und verwenden subList
Brocken nehmen aus ihm heraus. Z.B .:
List<List<Object>> subLists = IntStream
.range(0, (int) Math.ceil((double) list.size()/subListSize))
.mapToObj(i -> new ArrayList<>
(list.subList(i * subListSize, (i + 1) * subListSize)))
.collect(Collectors.toList());
Hinweis: Das Casting zu double
und Decke nach unten, um Integer-Division zu vermeiden, falls die subListSize
nicht list.size()
genau nicht teilt.
in Java 9 Sie die Indizes mit einem IntStream erzeugen kann Takewhile und anschließend mit diesen Indizes nehmen Sublisten aus der ursprüngliche Liste. Dies sollte jede Liste der Objekte für arbeiten:
private static final int BATCH_SIZE = 10;
public void test(){
List<List<Object>> batchedLists = split(generateTestObjects());
}
public List<List<Object>> split(List<Object> objects) {
return IntStream.iterate(0, n -> n + BATCH_SIZE)
.takeWhile(n -> n < objects.size())
.map(t -> objects.subList(t, Math.min(t + BATCH_SIZE, objects.size()))
.collect(Collectors.toList());
}
public List<Object> generateTestObjects(){
return IntStream.range(0, 100)
.boxed()
.collect(Collectors.toList());
}
- 1. Liste in Teile aufteilen
- 2. Aufteilen Liste alle x mal
- 3. Zeilen in Python in einer Liste aufteilen?
- 4. Alle Strings in einer Liste aufteilen?
- 5. Liste nach bestimmten Kriterien in Gruppen aufteilen
- 6. Aufteilen einer Liste in alle Kombinationen
- 7. Aufteilen der Liste in sortierte Unterlisten
- 8. Aufteilen einer Liste in ungleichmäßige Tupel
- 9. Aufteilen einer Liste in Teile ausgewogener Längen
- 10. Aufteilen einer Liste über alle möglichen Unterlisten
- 11. Wörterbuch/Liste in einer Pandas-Spalte in separate Spalten aufteilen
- 12. Aufteilen einer Liste mit n * n Elementen in n Listen mit n Elementen in jeder Liste
- 13. Wie kann ich Code-Blöcke in eine Liste aufteilen?
- 14. Python: Elemente in einer Liste mit mehreren Leerzeichen aufteilen?
- 15. Wie kann ich getrennte Wörter in einer Liste aufteilen?
- 16. Aufteilen der Liste möglicherweise verschachtelter Funktionsausdrücke in Python
- 17. Rand zum Aufteilen einer Liste von Bildern in flowLayoutPanel
- 18. Aufteilen der Liste in Listen mit einer maximalen Länge
- 19. Wie können Sie eine Liste in eine andere Liste aufteilen, wenn sie einen bestimmten Wert enthält?
- 20. Python3: Liste aufteilen und als Datei speichern - wie?
- 21. Aufteilen eine Liste durch eine andere mit einigen „0“ im Nenner Liste
- 22. Liste konvertieren [Liste [Beliebige]] in Liste [Liste [String]] in Scala
- 23. Liste in Liste entfernen
- 24. Liste in Liste in BEM
- 25. Java - Aufspalten Liste der Strings in kleinere Liste?
- 26. Python-Liste in Liste Neuformatierung
- 27. C# Liste in Liste hinzufügen
- 28. Liste der Liste in Jinja2
- 29. InslList in Basisblöcke aufteilen
- 30. Aufteilung in mehrere Sammlungen aufteilen
@birryree können Sie die Post, bevor er antwortete, lesen Sie bitte, ist es erwähnt Java8 – Moussi
@Moussi Nur weil es Java 8 erwähnt, bedeutet nicht, dass nicht-Java8 spezifische Antworten gelten nicht. – birryree
@birrreee mit klassischem Java kann man alles machen, aber das Poster sucht nach einer Java8-Lösung. – Moussi