如何从特定属性的ArrayList中删除项目?

时间:2015-09-12 18:55:55

标签: java arraylist

我创建了一个ArrayList:

ArrayList<Fruit> fruit = new ArrayList<Fruit>();

并添加了元素:

fruit.add(new Fruit("apple", "red");
fruit.add(new Fruit("orange", "orange");
fruit.add(new Fruit("strawberry", "red");

我想删除所有红色水果的实例。有人可以帮我弄明白怎么做吗?提前谢谢。

5 个答案:

答案 0 :(得分:2)

for (Iterator<Fruit> iter = list.listIterator(); iter.hasNext(); ) {
    Fruit f = iter.next();
    if (f.getColor().equalsIgnoreCase("red")) {
        iter.remove();
    }
}

假设您在Fruit类中有一个用于色域的getter方法。

答案 1 :(得分:1)

在Java 5.0+中,你可以做到

for(Iterator<Fruit> iter = fruit.iterator(); iter.hasNext(); )
    if (iter.next().getColour().equals("red"))
         iter.remove();

在Java 8中,您可以使用

创建一个新列表
List<Fruit> nonRed = fruit.stream()
                          .filter(f -> !f.getColour().equals("red"))
                          .collect(Collectors.toList());

答案 2 :(得分:1)

除了其他Java 8解决方案之外,removeIf界面中还有就地Collection

List<Fruit> fruit = new ArrayList<>();

fruit.add(new Fruit("apple", "red"));
fruit.add(new Fruit("orange", "orange"));
fruit.add(new Fruit("strawberry", "red"));

System.out.println(fruit);
fruit.removeIf(f -> f.color.equals("red"));
System.out.println(fruit);

答案 3 :(得分:0)

常用方法(语法)如下所示。

for (Iterator<Object> it = data.iterator(); it.hasNext();) {
if (it.next().getCaption().contains("_Hardi")) {
    it.remove();
}
}

答案 4 :(得分:0)

在Java 8中,您可以这样做:

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class Learning {

    public static class Fruit {
        public final String name;
        public final String colour;

        public Fruit(String name, String colour) {
            this.name = name;
            this.colour = colour;
        }
    }

    @Test
    public void x() {
        ArrayList<Fruit> fruit = new ArrayList<Fruit>();
        fruit.add(new Fruit("apple", "red"));
        fruit.add(new Fruit("orange", "orange"));
        fruit.add(new Fruit("strawberry", "red"));

        List<Fruit> notRed = 
                fruit
                        .stream()
                        .filter(f -> !f.colour.equals("red"))
                        .collect(Collectors.<Fruit>toList());
    }
}