予期しないString.join()の挙動

Vishwaラトナ:

私はの内容を印刷しようとしたList<String>「とそれらの間に」。VenkatさんSubramaniamによりJavaで本関数型プログラミングを踏襲し、ページ上で54、彼は私がやっている正確に何をやったが、私の印刷結果は、コンマなしで1つの文字列として来ています(,)

String[][] deepArrayStr = new String[][]{{"Alex", "nullpointer"}, {"Eran", "George"}};
 List<String> str= Arrays.stream(deepArrayStr)
     .flatMap(Arrays::stream)
     .collect(Collectors.toList());
for(String s:str){
    System.out.print(String.join(",",s));
}

出力AlexnullpointerEranGeorge

予想Alex,nullpointer,Eran,George


本の中でVenkatさんも私がやっていることと同じことをしたのに対し、私は上記のアプローチで間違ってやっていることは何がある私は知りたいと思った、私は別の方法を試してみましたが、それが正常に動作しますか?

 System.out.println(Arrays.stream(deepArrayStr)
        .flatMap(Arrays::stream)
        .collect(Collectors.joining(",")));

出力Alex,nullpointer,Eran,George

予想Alex,nullpointer,Eran,George

私の質問はから変換することではないListstringが、印刷中に区切り文字を追加します。

ジョンスキート:

あなたは、リストを反復処理し、呼び出しているString.join単一のエントリたびに。これは、区切り文字を使用するつもりはありませんです。

これを明確にするために、これらの2つの例を考えてみます。

String x1 = String.join(",", "a");
String x2 = String.join(",", "a", "b");

その後の値がx1「A」になり、の値がx2「B」になります。String.join唯一の区切り文字追加の間でアイテムを-あなたは、単一のアイテムを渡すそうならば、それは、任意の区切り文字を追加する必要はありません。

あなたは自分の削除することができますforループを、とに置き換えます。

System.out.println(String.join(",", str));

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=176692&siteId=1