Ich habe Iterable<CSVRecord> = CSVFormat.RFC4180.withFirstRecordAsHeader().parse(in)
(Apache Commons) Datensätze, die> 10.000.000.000 Zeilen ist. Zuvor hatte ich eine for-Schleife mit Zähler und nach jeder x-Zeile verarbeitete ich Daten. Jetzt versuche ich einen ähnlichen Effekt mit Java 8 Lambda-Ausdrücken zu erreichen.So teilen Sie Iterable in Chunks mit Lambda-Ausdrücken
Bisher komme ich mit diesem, aber es läuft nicht genügend Arbeitsspeicher, da ich nicht in der Lage bin richtigen Weg zu finden, wie das spalten in subList
Iterable<List<?>> params = new ArrayList<>(StreamSupport
.stream(records.spliterator(), true)
.map(r -> Arrays.asList(
r.get("name"),
r.get("surname"),
r.get("something"),
))
.collect(Collectors.toList()).subList(0, 20000));
subList am Ende nicht funktioniert :(
ich brauche nur einen Beweis Konzept wie Iterable
aufzuspalten - zB der richtigen Ort, wo subList
Ist 'records' eine Liste? Wenn ja, könnten Sie vielleicht auch lists.partition von guava verwenden (es gibt auch eine Version in Iterables). –
meine Frage aktualisiert. Debugger sagt Datensätze ist 'org.apache.commons.csv.CSVparser' – lapkritinis