如果列表项为false,则只在另一个列表中添加一次

时间:2017-08-29 09:15:45

标签: java arraylist conditional-statements

我有一个班级:

public class myObj {

    private boolean liesIn;
    private String Area;

  public myObj(){

  }


  public myObj(boolean liesIn, String Area) {
      super();
      this.liesIn = liesIn;
      this.Area = Area;
      }


  public boolean isLiesIn() {
      return liesIn;
  }

  public void setLiesIn(boolean liesIn) {
      this.liesIn = liesIn;
  }

  public String getArea() {
      return Area;
  }

  public void setArea(String Area) {
      this.Area = Area;
  }

}

我正在用这些对象填充列表:

 List<myObj> results = new ArrayList<myObj>();     

 for (int i = 0; i < 10; i++) {

    myObj theObj = new myObj();
    theObj.setLiesIn(condition);

    if (condition) {
      theObj.setArea(Areas.values()[i].name());
      results.add(theObj);

     } else {
        theObj.setArea("No area");
        results.add(theObj);
     } 

}

现在,问题在于,例如,我可能有一个真实和9个谬误,并且在退出时(当我返回结果时),我得到所有结果/对象,如:

[
{
"liesIn": false,
"Area": "No area" 
},

{
 "liesIn": false,
"Area": "No area" 
},
{
"liesIn": true,
"Area": "Area13" 
},
{
"liesIn": false,
"Area": "No area" 
},
{
 "liesIn": true,
"Area": "Area14" 
},



....
]

所以,如果我有真正的价值观,我只想展示它们。没有任何意义来展示虚假的价值。

如果所有值都为false,我只想显示一个结果。

我想创建一个新的结果List并在旧列表中使用迭代器:

 List<myObj> newresults = new ArrayList<myObj>();

 Iterator<myObj> iter = results.iterator();
 while (iter.hasNext()) {
   myObj lies = iter.next();

   if (lies.isLiesIn() == true) {
          newresults.add(lies);
   } else {
          // add only 1 object with false value (no area)    
   }

 }

所以,我不知道如何处理最后一段代码。也许有另一种方法可以做到。我想使用副本将results复制到newresults但我再也无法处理其他声明。

1 个答案:

答案 0 :(得分:1)

这不是问题 - 你需要做的就是:

List<myObj> newresults = new ArrayList<myObj>();

 Iterator<myObj> iter = results.iterator();
 while (iter.hasNext()) {
   myObj lies = iter.next();
   if (lies.isLiesIn() == true) {
          newresults.add(lies);
   }
 }
 // if no true element was added - the list contained only false
 if (newresults.size()==0 && results.size()>0) {
     newresults.add(results.get(0));
 }