2016-10-28 3 views
-4

String.joinを使用して、文字列のリストをセパレータで連結することができます。ストリームでJavaの2つの異なるセパレータで文字列の配列を結合するエレガントな方法

私の問題は今、私は文字列の配列の配列を持っています。

例えば

[(a, b), (c, d), (e,f)], 

私は、コロン、およびこれらのペア間の空間によってa&b, c&d, e&fに参加したいです。

a:b c:d e:f 

よう

は、これを行うためのエレガントな方法はありますか?

フォローアップ:あなたは別のループにネストされたループでこれを行う場合は

は、あなたが

+0

答えは本当に違いはありません。ループをループに追加して配列をループするだけです。 – Hypino

+0

カンマとスペースで結合するとしますが、コロンで例を使用します。私は理解していません – jthort

+0

@Hypino別のループでネストされたループでこれを行うと、あなたのプール内にたくさんのString変数が作成されます。 –

答えて

0

のJava 8であなただけのことができる非常に良い見ていないあなたのプールに文字列変数の多くを作成しますそれらをコレクタに結合する文字列にストリームします。単に「内部」配列に対しても、結果に対しても同様です。

String[][] stringsss = new String[][] { 
    {"a", "b"}, 
    {"c", "d"}, 
    {"e", "f"} 
}; 
String result = Arrays.stream(stringsss) 
    .map(e -> Arrays.stream(e).collect(Collectors.joining(":"))) 
    .collect(Collectors.joining(" ")); 
System.out.println(result); 
+0

これは、私が関心がない文字列プールに中間の文字列をたくさん作成するかどうか疑問に思っています。もしそうなら、これを回避する良い方法はありますか? –

+0

'java.util.StringJoiner'を見てみると、内部的に' java.lang.StringBuilder'を使用していることがわかります。 「内部」配列につき1つの中間結果が得られ、最終結果が得られます。より効率的な方法が必要な場合は、ループを使用する必要があります。その後、自分でバッファリングを制御することができます。 – Brian

+0

OK。ご回答有難うございます。 2つのネストされたStringBuildersを使用してそれを行うことができますが、最初のStringBuilderから生成された中間の文字列は好きではありません:p –

関連する問題