2016-12-24 2 views
1

У меня есть четыре строки, которые мне нужно добавить.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, если я выбираю Food и File.

Food 
File 
null 
null 

С Parcel и другие не имеют никаких значений (что null), как сделать это будет печатать, как показано ниже?

Food 
File 

Я пытался использовать if else, но это будет слишком долго (14 возможностей). Есть ли другой способ сделать его более коротким и эффективным?

+0

Какой тип 'extras' –

+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:
Для более старых версий Java, вы могли бы сделать что-то подобное с традиционным for цикла, хотя бы clunkier :

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

@ Август, возможно. Я настоятельно рекомендую обновить версию JDK/Android до версии, поддерживающей потоки. Если это невозможно, см. Мой отредактированный ответ для варианта для более старых версий. – Mureinik

1

Вы можете просто заменить все null значения

String food = "food"; 
    String file = "file"; 
    String parcel = null; 
    String others = null; 

    String itemList = new StringBuilder(food).append("\n").append(file).append("\n").append(parcel).append("\n").append(others).toString(); 
    itemList=itemList.replaceAll("\n?null\n?", ""); 
    System.out.println(itemList); 

Выход:

food 
file 

\n?null\n?\n? означает, что может быть один или нет \n значения по обе стороны null

так будет просто заменить все значения с пустой строкой

1

Если вы хотите перейти ниже Java 8, а затем его возможный сквозной оператор в java. Пожалуйста, смотрите ниже фрагменте кода:

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 будет иметь желаемый результат. Надеюсь, это поможет.