我有一个包含10个元素的List对象,我必须进行条件检查并从列表中删除一些元素。我已经完成如下,但它没有按预期工作,任何输入?
List<MyDTO> myList = new ArrayList<MyDTO>(); //myist.size () is 10
我想检查如下:
for(MyDTO res : myList){
if(res.getResult().equals("cancel")){
myList.remove()
}
}
如上面的代码所示,如果res.getResult()是“取消”,我想从列表中删除该特定对象(myList)。它是否是基于条件检查从列表中完全删除元素的正确方法?
答案 0 :(得分:3)
只需在列表中使用removeIf
,例如,如果您的Integer
列表范围为1到10,并且您想删除大于4的Integer
,那么您可以:
yourListHere.removeIf(x -> x > 4);
结果列表将包含:1,2,3和4
请在此处阅读removeIf
:
<强>奖金强>
如果您不熟悉Java 8功能,则需要其他资源:
Lambdas - https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html
功能界面 - https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html
答案 1 :(得分:0)
作为removeIf
的替代方案,您可以使用Java流解决方案:
List<MyDTO> newList = myList.stream()
.filter(s -> !s.getResult().equals("cancel"))
.collect(Collectors.toList());
当输入列表的长度和要删除的元素数量相对较大时,这可能会更方便。
答案 2 :(得分:0)
使用 removeIf :
default boolean removeIf(Predicate<? super E> filter)
删除此集合中满足给定条件的所有元素 谓语。迭代期间抛出的错误或运行时异常 谓词被转发给调用者。
在你的例子中:
myList.removeIf(res -> res.getResult().equals("cancel"));
答案 3 :(得分:0)
如果使用Java 8:
myList.removeIf(x -> x.getResult().equals("cancel"));
如果年龄较大(6,7):
public class MyDTO {
private String result;
(...)
public MyDTO(String result) {
this.result = result;
}
public String getResult() {
return result;
}
(...)
@Override
public int hashCode() {
return 31;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final MyDTO other = (MyDTO) obj;
return !((this.result == null) ? (other.result != null) : !this.result.equals(other.result));
}
(...)
}
然后:
MyDTO toRemove = new MyDTO("cancel");
while(myList.contains(toRemove))
myList.remove(toRemove);
或:
List<MyDTO> toRemove = new ArrayList<MyDTO>();
for(MyDTO res : myList){
if(res.getResult().equals("cancel")){
toRemove.add(res);
}
}
myList.removeAll(toRemove);
不覆盖equals方法:
for(int i = 0; i < myList.size() ; i++)
if(myList.get(i).getResult().equals("cancel"))
myList.remove(i);
或:
Iterator<MyDTO> i = myList.iterator();
while (i.hasNext())
if(i.next().getResult().equals("cancel"))
i.remove();