2016-12-24 10 views
1

追加する必要がある4つの文字列があります。Java/Android:複数の文字列を追加し、文字列がヌルの場合はスキップします。

String food = extras.getString("food"); 
String file = extras.getString("file"); 
String parcel = extras.getString("parcel"); 
String others = extras.getString("others"); 

String itemList = new StringBuilder(food).append("\n") 
         .append(file).append("\n") 
         .append(parcel).append("\n") 
         .append(others).toString(); 

このコードますprints、私はFoodFileを選択した場合。 Parcel以来

Food 
File 
null 
null 

と他の人は、それは以下のように印刷されるようにする方法、(nullである)値を持ちませんか?

Food 
File 

if elseを使用しようとしましたが、長すぎます(可能性は14です)。それを短く効果的にする他の方法はありますか?

+0

「エクストラ」の種類 –

+0

@PavneetSinghバンドル – August

+0

サポートしている最小APIレベルは?あなたはこのようなものを使用することができます 'String food = extras.getString(" food "、" ");' –

答えて

1

のJava 8のストリーミング機能は、これを行うのはかなりきちんとした方法を提供します:

String itemList = 
    Stream.of(food, file, parcel, others) 
      .filter(Objects::nonNull) 
      .collect(Collectors.joining("\n")); 

EDIT:それはclunkierだろうが、あなたは、伝統的なforループと似た何かができるのJavaの古いバージョンの

StringBuilder sb = new StringBuilder(); 
for (String s : Arrays.asList(food, file, parcel, others)) { 
    if (s != null) { 
     sb.append(s).append('\n'); 
    } 
} 
String itemList = sb.toString(); 
+0

シンボル 'Stream'を解決できません。のJava 8の?しかし、プロジェクト設定では、すでにjdk1.8.0_101 – August

+0

@August yupと設定されています。 JDK/AndroidバージョンをStreamsをサポートするバージョンにアップグレードすることを強くお勧めします。これが不可能な場合は、私の編集した古いバージョンのバリエーションの回答を参照してください。 – Mureinik

1

あなたは、単にすべてのnull

を置き換えることができます

出力:

food 
file 

\n?null\n?\n?あなたがしたい場合ので、それは単に空の文字列

1

ですべての値を置き換えますnull

の両側に1つのまたは全く\n価値があることを意味Java 8の下位に移動し、Javaの3進演算子を使用して可能です。以下のコードスニペットをご覧ください:

String itemList = new StringBuilder(food!=null?food+"\n":"") 
      .append(file!=null?file+"\n":"") 
      .append(parcel!=null?parcel+"\n":"") 
      .append(others!=null?others+"\n":"") 
      .toString(); 

itemListは望ましい結果を示します。 お手伝いをしてください。

関連する問題