2013-04-05 2 views
2

Прошу прощения, если вопрос немного расплывчатый, поэтому я попытаюсь это объяснить.«if» или «where» in for loop arraylist в java?

Я получил этот код:

public String toString() 
{ 
    String s = "text.\n"; 

    for (Klus k : alleKlussen) 
    { 
     s += k.toString() + ".\n"; 
    } 
    return s; 
} 

Но я хочу, чтобы сделать различные петли для различных условий. Например, «Klus» имеет несколько переменных, как: статус, даты и т.д.

Я не очень опытный с Явы еще, но это было бы возможно сделать что-то вроде этого:

for (Klus k : alleKlussen; status = "completed") 
{..} 

Я знаю, что это неправильно, но я хотел бы показать все объекты «Klus», где статус «завершен» и все объекты «Klus», где statis «не завершен».

Спасибо, и если что-то неясно, или я использовал неправильное слово для чего-нибудь, скажите, пожалуйста.

Edit:

Он должен сделать что-то вроде этого:

if (k.getStatus().equals("completed"){ 
    String s = "completed ones \n" 
    s += k.toString() + ".\n"; //get all completed ones 
} 
if (k.getStatus().equals("uncompleted"){ 
     String s = "uncompleted ones \n" 
     s += k.toString() + ".\n"; //get all uncompleted ones 
    } 
+2

Пожалуйста, используйте 'StringBuilder' итеративного' String' конкатенации! Так много объектов горит ... – Quetzalcoatl

+0

Внутри цикла for вы просто будете хотеть «если» конечно? – Quetzalcoatl

+1

Я думаю, что я объяснил это немного неправильно, я отредактировал свой вопрос – colin

ответ

3

Просто добавьте условие внутри цикла for():

for (Klus k : alleKlussen) { 
    if (k.getStatus().equals("completed")) { 
     s += k.toString() + ".\n"; 
    } 
} 

С дополнительной информацией по вопросу , представляется, что предназначено следующее:

String completed = "completed ones \n"; 
String uncompleted = "uncompleted ones \n"; 

for (Klus k : alleKlussen) { 

    if (k.getStatus().equals("completed")) { 
     completed += k.toString() + ".\n"; //get all completed ones 
    } 
    else if (k.getStatus().equals("uncompleted")) { 
     uncompleted += k.toString() + ".\n"; //get all uncompleted ones 
    } 
} 

Вы также должны использовать StringBuilder для создания строк результата, что уменьшает издержки памяти.

+0

Спасибо! Я забыл об утверждении if, но это не совсем то, что я ищу, я думаю, что немного объяснил это. Я отредактировал мой вопрос – colin

+0

+1 для того, чтобы быть самым простым правильным ответом :) –

+0

Это работает для всех завершенных, но как я должен сделать то же самое для незавершенных? просто сделайте еще один цикл for-loop в toString()? – colin

0

Почему бы не просто сделать стандарт, если-условными, такие как:

if ("".equals(k.getStatus())) { 

} else if ("completed".equals(k.getStatus())) { 

} 
+4

Человек с предложением '20k' rep использовать' == 'для сравнения значений строк? Невероятно. – SudoRahul

+2

@ RJ Это не было моим предложением, мое предложение состояло в том, чтобы использовать стандартную конвенцию на большинстве языков - если утверждения - проверка равенства была, кстати, моей нехваткой знаний о Java _специально_, но я не думаю, что это умаляет предложение _actual_ , Невероятно рассудительный, может быть, как будто вы ожидаете, что я получил 20k rep в [tag: Java]. –

+0

И спасибо, @Qwerky, за конструктивное редактирование. –

0
Use this - this toString will print only Klus are completed. 
public String toString() 
    { 
     String s = "text.\n"; 

     for (Klus k : alleKlussen) 
     { 
      if("completed".equals(k.getStatus())) 
      s += k.toString() + ".\n"; 
     } 
     return s; 
    } 
2

Вы можете использовать переключатель, если у вас есть много условий и легко читать

для (Klus к : alleKlussen) {

switch(k.getStatus()){ 
     case "completed": .... 
          break; 

     case "uncompleted": .... 
          break; 

     default: ... 
} 

}

Обратите внимание switch с Строковыми литералами поддерживаются только в Java 7.

+0

Почему это было бы идеальным случаем для перечислений, даже если поддерживаются строковые литералы –

+0

Спасибо за ваш ответ, но как он должен выбрать только объекты «Klus» с «завершенными» в этом случае? – colin

+0

@Colin Невозможно «просто» получить объекты «Klus» в зависимости от статуса объекта в этом сценарии. Вам нужно пройти через объекты и проверить. – IndoKnight

0

Для добавления незавершенного после законченных, попробуйте это (А я предлагаю использовать перечисления, но вы можете придерживаться строк. Но тогда это будет работать только в Java SE 7!):

Состояние.Java:

// Makes switches easy to use and String typos are impossible 
public enum State { COMPLETE, INCOMPLETE }; 

Заменить текущий String "состояние" с перечисления так:

Klus: Java

public class Klus { 
    private State state; 
    ... 
    public State getState() { return this.state; } 
    ... 
} 

Теперь использовать его в переключателе в течение цикла. Используйте две строки: одну для полной, одну для неполной. Приложите их в конце. (Обратите внимание на использование StringBuilder вместо ул + = ...)

Класс, содержащий ваш ToString():

public String toString() { 
    StringBuilder complete = new StringBuilder("completed ones \n"), 
        uncompleted = new StringBuilder("uncompleted ones \n"); 
    for(Klus k : alleKlussen) { 
     switch(k.getStatus()) 
     case COMPLETE: 
      complete.append(k.toString()).append(".\n"); break; 
     case INCOMPLETE: 
      uncompleted.append(k.toString()).append(".\n"); break; 
     default: 
     } 
    } 

    complete.append(uncompleted.toString(); 

    return complete.toString(); 
} 
+0

Спасибо за ответ, я вижу много вещей, о которых еще не слышал. Но, возможно, в финальной версии я мог бы также использовать этот метод для статусов. Благодарю. – colin

+0

@colin, пожалуйста. Ответ Андреаса помогает вам без лишних звонков и свистков: -D Получайте удовольствие от кодирования! –