Conflating de Java arroyos

sgp15:

Tengo muy grande Arroyo de documentos versionados ordenados por ID de documento y la versión.

Por ejemplo, AV1, AV2, BV1, Cv1, Cv2

Tengo que convertir esto en otra corriente cuyos registros se agregan por documento de identificación.

A [v1, v2], B [v1], C [v1, V2]

¿Es posible hacerlo sin usar Collectors.groupBy()? No quiero usar groupBy()porque va a cargar todos los elementos de la corriente en memoria antes de agruparlas. En teoría, uno no necesita cargar toda la corriente en la memoria, ya que se le ordena.

millimoose:

Se puede utilizar groupRunsen la biblioteca StreamEx para esto:

class Document {
    public String id;
    public int version;
    public Document(String id, int version) {
        this.id = id;
        this.version = version;
    }
    public String toString() {
        return "Document{"+id+version+ "}";
    }
}

public class MyClass {
    private static List<Document> docs = asList(
        new Document("A", 1),
        new Document("A", 2),
        new Document("B", 1),
        new Document("C", 1),
        new Document("C", 2)
    );

    public static void main(String args[]) {
        StreamEx<List<Document>> groups = StreamEx.of(docs).groupRuns((l, r) -> l.id.equals(r.id));
        for (List<Document> grp: groups.collect(toList())) {
            out.println(grp);
        }
    }
}

qué salidas:

[Documento {A1}, Documento {A2}]
[Documento {B1}]
[Documento {C1}, Documento {C2}]

No puedo verificar esto no consume toda la corriente, pero no puedo imaginar por qué tendría que dado lo que groupRunsse pretende hacer.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=176938&siteId=1
Recomendado
Clasificación