2017-04-13 17 views
1

ストリーム経由でいくつかのストリームに参加し、結果を結合するものがない場合は、 ""のような空の文字列があります。それが空の場合にデフォルト値を追加する可能性はありますか?例えば。 「 - 」ストリーム結合結果のデフォルト値

someList.stream() 
       .filter(a -> a.getKey() != null) 
       .map(a -> a.getKey()) 
       .sorted() 
       .collect(Collectors.joining(", ")); 

アップデート: 私はそこにそれを行うには、他の方法があるが、私はちょうど「」のデフォルト値(空の文字列)だけ追加しない理由

+0

なぜ、もしif(outString.isEmpty())return " - "; 'のようなテストを追加しないのですか? – freedev

+0

文字列を生成した後に、 – user489872

+0

をチェックするだけです。 – freedev

答えて

2
String result = someList.stream() 
     .filter(a -> a.getKey() != null) 
     .map(a -> a.getKey()) 
     .sorted() 
     .reduce((a,b) -> a + ", " + b).orElse("-"); 

if (outString.isEmpty()) return "-";

のようなテストcollectの代わりにreduceを使用します。

EDIT:最初の解決策は実際には期待通りに機能しませんでした。これは一つです。

+2

これはうまくいかないでしょう.2つの要素は "-A、B 、 " – Beri

+0

どこにコードを追加しますか? – user489872

+0

これを明確にするための回答を編集しました –

1

を上書きすることができますかどうかを知りたかったのを知っていますちょうどあなたのコード

String outString = someList.stream() 
      .filter(a -> a.getKey() != null) 
      .map(a -> a.getKey()) 
      .sorted() 
      .collect(Collectors.joining(", ")); 

if (outString.isEmpty()) 
    return "-"; 
else 
    return outString; 
関連する問題