从列表对象中删除元素

时间:2018-01-18 22:04:58

标签: java

我有一个包含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)。它是否是基于条件检查从列表中完全删除元素的正确方法?

4 个答案:

答案 0 :(得分:3)

只需在列表中使用removeIf,例如,如果您的Integer列表范围为1到10,并且您想删除大于4的Integer,那么您可以:

yourListHere.removeIf(x -> x > 4);

结果列表将包含:1,2,3和4

请在此处阅读removeIf

https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html#removeIf-java.util.function.Predicate-

<强>奖金

如果您不熟悉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();