&引用;如果;或;其中;java中arraylist的for循环?

&引用;如果;或;其中;java中arraylist的for循环?,java,for-loop,arraylist,conditional-statements,Java,For Loop,Arraylist,Conditional Statements,如果这个问题有点含糊,我很抱歉,我会尽力解释的 我得到了这个密码: public String toString() { String s = "text.\n"; for (Klus k : alleKlussen) { s += k.toString() + ".\n"; } return s; } 但是我想为不同的条件做不同的循环。 例如,“Klus”有两个变量,如:状态、日期等 我对java还不是很有经验,但是可以这样做

如果这个问题有点含糊,我很抱歉,我会尽力解释的

我得到了这个密码:

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

    for (Klus k : alleKlussen)
    {
        s += k.toString() + ".\n";
    }
    return s;
}
但是我想为不同的条件做不同的循环。 例如,“Klus”有两个变量,如:状态、日期等

我对java还不是很有经验,但是可以这样做吗:

for (Klus k : alleKlussen; status = "completed")
{..}
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
    }
我知道这是错误的,但我希望它显示状态为“已完成”的所有“Klus”对象和状态为“未完成”的所有“Klus”对象

谢谢,如果有什么不清楚或者我用错了词,请告诉我

编辑:

它应该是这样的:

for (Klus k : alleKlussen; status = "completed")
{..}
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
    }

只需在
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
    }
}

你也应该考虑使用A来创建结果字符串,这会减少内存开销。

为什么不做标准if条件,比如:

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

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

}

如果您有许多条件,并且易于阅读,则可以使用该开关

对于(Klus k:alleKlussen) {

}


请注意,Java 7仅支持字符串文字。

若要在已完成的文字之后追加未完成的文字,请尝试此操作(我建议使用枚举,但欢迎您坚持使用字符串。但这仅适用于Java SE 7!):

State.java:

// Makes switches easy to use and String typos are impossible
public enum State { COMPLETE, INCOMPLETE };
将当前字符串“state”替换为枚举,如下所示:

Klus:java

public class Klus {
   private State state;
   ...
   public State getState() { return this.state; }
   ...
}
现在在for循环的开关中使用它。使用两个字符串,一个表示完整,一个表示不完整。最后附加它们。(注意使用StringBuilder而不是str+=…

包含toString()的类:



请使用
StringBuilder
进行迭代
String
连接!这么多东西烧掉了…在你的for循环中,你肯定会想要一个
如果
的话?我想我解释得有点错误,我编辑了我的问题你的编辑基本上显示了答案。我现在看不到这个问题。您使用的是什么版本的java?一个拥有
20k
的人代表建议使用
=
进行字符串值比较?难以置信。@R.J这不是我的建议,我的建议是在大多数语言中使用标准约定-if语句-等式检查是我对Java缺乏专门知识,但我不认为这有损于实际建议。令人难以置信的判断,也许,就像你期待我在世界上有2万个代表一样。谢谢!我忘记了if语句,但它不是我想要的,我想我解释得有点错误。我编辑了我的问题这对所有已完成的问题都有效,但我应该如何对未完成的问题进行同样的处理?只需在toString()中创建另一个for循环?@colin检查我的更新答案-这是您需要的吗?之后有两个不同的字符串,包含来自已完成和未完成对象的信息。你可以使用两个
for()
循环,但是你需要重复你的列表两次根据@colin的需要,他总是可以连接两个字符串并返回结果hanks,这对我来说很有用。我只是需要一个完整和未完成的名单,这就是这样!为什么,对于枚举来说,这是一个完美的例子,即使支持字符串文字谢谢您的回答,但在这种情况下,它应该如何仅选择“已完成”的“Klus”对象?@Colin在这种情况下,根据对象状态,“仅”获取“Klus”对象是不可能的。您需要遍历对象并检查。@Simon我同意,但在最初的问题中,用户没有使用枚举。他使用状态作为字符串文本。我认为这通常也会起作用,但另一个更简单,因为我还没有学会用例。无论如何谢谢你!谢谢你的回答,我看到了很多我还没听说的事情。但也许在最终版本中,我也可以对状态使用这种方法。谢谢。@colin不客气。安德烈亚斯的答案帮助你摆脱了所有额外的麻烦,不过:-我会玩得很开心!
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();
}