是否有一个很好的运算符来构造一个来自Observable <list <string>&gt;的字符串?仅使用1个缓冲区?

时间:2018-03-22 10:07:31

标签: rx-java reactive-programming rx-java2

Observable<List<String>> listOfCsvValues = Observable.just(["id", "name"], [2, "messi"], ...)

我可能会使用以下构造,但它会创建一些临时缓冲区(每个String.join()基本上会在最后调用buffer.toString()):

.map(values -> String.join(",", values))
                .toList()
                .map(records -> String.join("\n", records));

我真正想要的只是拥有一个巨大的缓冲区。

1 个答案:

答案 0 :(得分:1)

收集它:

listOfCsvValues
    .collect(() -> new StringBuilder(),
        (builder, list) -> {
            if (builder.length() > 0) {
                builder.append('\n');
            }
            boolean separate = false;
            for (Object o : list) {
                if (separate) {
                    builder.append(',');
                } else {
                    separate = true;
                }
                builder.append(o);
            }
        }
    )
    .map(Object::toString)