2
私はストリングのストリームを持っています。各文字列は次のようなjsonオブジェクトを表します。Javaストリームコンマ区切り
// {"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"}",]
ストリームを使用して、最新のカンマを取り除くためにどのように任意のアイデア?
にそれを展開することがあります空のストリームを処理する必要がある場合には
、ラメ(しかし、一般的な)アプローチはしないようになりますすべてのメッセージの後にカンマを出力しますが、各メッセージの前に出力するようにしてください(最初のメッセージはブール値で処理できます)。 – Thilo
もう1つの(一般的な)アプローチは、ダミーのエントリを追加するだけです(無視するようにクライアントコードを取得できると仮定します)。 – Thilo
Thilo、あなたの答えをありがとう、私はちょっとあなたの最初の提案のように、私はストリームでそれぞれのために使用するとき、要素が最初であるかどうかを確認することができますか教えてくれますか? – user3127896