gpt4 book ai didi

java流逗号分隔

转载 作者:行者123 更新时间:2023-11-30 08:35:54 25 4
gpt4 key购买 nike

我有一个字符串流。每个字符串代表 json 对象,例如:

// {"foo": "bar", "bar": "foo"}
String s1 = "{\"foo\": \"bar\", \"bar\": \"foo\"}";

我从数据库中获取大量数据,这就是我使用 Stream 的原因。我想将此数据流式传输到 HTTP 响应的输出。

try (Stream<String> data = service.streamData()) {
os.write("[".getBytes());
eventStream.forEach(s -> {
try {
os.write(s.getBytes());
os.write(",".getBytes());
os.write("\n".getBytes());
} catch (IOException e) {
logger.error(e.getMessage());
}
});
}
os.write("{}]".getBytes());
os.flush();

由于每个字符串代表一个 json 对象,我想返回这些对象的数组。在这种情况下,我必须手动添加 "[""]" 并使用逗号分隔流中的每个元素。但最终我也会在最新元素之后加上逗号。这不是有效的 json。

它看起来像这样:

["{"foo": "bar", "bar": "foo"}", "{"foo": "bar1", "bar": "foo1"}",]

关于如何使用流去除最新的逗号有什么想法吗?

最佳答案

请注意,虽然 lambda 表达式是一个很好的特性,但匿名内部类并没有停止存在。如果您需要有状态的消费者,它们是正确的工具。你甚至不需要这里的条件:

stream.forEach(new Consumer<String>() {
int header = '[';
public void accept(String string) {
try {
os.write(header);
os.write('\n');
os.write(string.getBytes(StandardCharsets.UTF_8));
header=',';
} catch (IOException e) {
logger.error(e.getMessage());
}
}
});
os.write('\n');
os.write(']');

如果您必须处理空流,您可以将其扩展为

os.write('[');
stream.forEach(new Consumer<String>() {
int header = ' ';
public void accept(String string) {
try {
os.write(header);
os.write('\n');
os.write(string.getBytes(StandardCharsets.UTF_8));
header=',';
} catch (IOException e) {
//logger.error(e.getMessage());
}
}
});
os.write('\n');
os.write(']');

关于java流逗号分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37985778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com