2015-06-06 4 views
0

Мне нужно перебирать некоторую строку, если она не пустая. Я имею в виду следующее:Как перебирать непустую строку?

for (String email : partnerEmails.isEmpty() ? new ArrayList<String>() 
        : partnerEmails.split("\\s*,\\s*")) { 
    selectedEmails.add(email); 
} 

Дело в том, что я беспокоюсь о том, что я создаю новый пустой list, который принимает некоторые ресурсы и память, и должны быть мусора в ближайшее время. Как я могу избежать этого?

+0

Зачем перебирать пустой аррайалист, который вы только что создали? – vefthym

+0

@vefthym Becaus, если бы я этого не сделал, я бы получил список с пустой строкой, которая была не тем, что я хотел. – user3663882

+0

Почему бы вам не разделить строку partnerEmails в массив строк? – Andrei

ответ

1

Вы можете ввести только петлю if ((null != partnerEmails) && !partnerEmails.isEmpty()). Если вы хотите сохранить свой цикл, вы можете определить private static ArrayList<String> EMPTY_LIST = new ArrayList<String>(); и перебрать этот список вместо этого.

1

Validate пуст, прежде чем итерация:

if (!partnerEmails.isEmpty()) 
    for (String email : partnerEmails.split("\\s*,\\s*")) 
     selectedEmails.add(email); 
1

1) Collections.emptyList() решает проблему создания нового объекта каждый раз (не то, что вы должны беспокоиться о таких микро-оптимизации).

2) Вам не нужен итератор. Вместо этого используйте следующий код:

List<String> emails = partnerEmails.isEmpty() 
        ? Collections.emptyList() 
        : Arrays.asList(partnerEmails.split("\\s*,\\s*")); 
selectedEmails.addAll(emails); 
Смежные вопросы