2017-08-29 55 views
1

添加它只有一次我有一个类:如果列表项是虚假的,另一份名单

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" 
}, 



.... 
] 

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

如果所有的值都是假的,我只想显示一个结果。

我想创建一个新的结果列表,并使用迭代器在旧列表:,我不知道该如何处理的最后一块code.Maybe的还有另一种方式来

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)  
    } 

} 

所以做它。我想使用副本为了复制resultsnewresults但我再也不能处理else语句。

+0

你可以只打开名册,如果有至少一个真正的价值 - 复制过来。如果没有任何真正的项目,循环后随机复制一个项目(让我们说索引0) - 因为它们都是假的,并且没有必要特别选择一个项目。我用下面的代码写了一个答案。我希望它有帮助。 – Assafs

回答

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)); 
} 
+0

不错!它的工作,谢谢。我不明白最后一部分,虽然'newresults.add(results.get(0));'。这里,我们添加到新列表结果从第一个列表(结果)在位置0.但是,我们怎样才能确定'results.get(0)'是错误的?因为它已经被填充了。 – George

+0

在迭代中扫描结果 - 因此我们知道所有项目都是错误的,因为迭代不会复制单个条目。因此,结果中的所有项目都是错误的 - 包括0索引中的项目。我们只复制一个到新的列表中,代表所有其他的错误。 – Assafs

+1

是的,你是对的!谢谢! (UPV) – George

相关问题