如何删除Arraylist中特定元素的元素?

时间:2015-05-21 16:07:08

标签: java arraylist

首先我使用方法loadInMovie的Class Watcher加载每个类型的元素。

    /*Load elements for each Genre*/
    Watcher.loadInMovie(genre.NON_FICTION, 10);
    Watcher.loadInMovie(genre.GENERAL_FICTION, 10);
    Watcher.loadInMovie(genre.SCIENCE_FICTION, 10);
    Watcher.loadInMovie(genre.WESTERN, 10);

在方法中,我使用Movie结构对象

加载信息
    @Override
    public void loadInMovie(Genre genre,int cantidad)  
    {
        for (int x=0;x<cantidad;x++)
        {
            al.add(new Movie(x,genre,"Movie" + x,"",1));
        }
    }

之后,我有另一种方法可以删除上一个方法中的元素。

@Override
public Movie RemoveMovie (Genre genre) 
{
    /*Movie*/
    /*array clone*/
    ArrayList<Movie> alClone = new ArrayList<Movie>();
    alClone=(ArrayList)al.clone();

    /*remove Movie*/

    al.remove(al.size()-1);
    return alClone.get(alClone.size()-1);
}

我想在数组列表中删除特定元素数据的元素。例如,arrayList包含带有Genre ScienFiction的Object Movie我想删除这个类型的最后一个元素。删除id 9,因为10元素从0开始。但是使用此代码删除元素id 39.如何过滤类型并删除最后一个元素?

1 个答案:

答案 0 :(得分:1)

以相反的方式迭代:

    import java.util.ArrayList;
    import java.util.List;
    import java.util.ListIterator;


    public class MovieListExample {

        List<Movie> movies = new ArrayList<>();

        public class Movie {

            int id;
            Genre genre;

            public Movie(int id, Genre genre)
            {
                this.id = id;
                this.genre = genre;
            }

            @Override
            public String toString()
            {
                return "Movie{" + "id=" + id + ", genre=" + genre + '}';
            }

        }

        public enum Genre {

            NON_FICTION,
            GENERAL_FICTION,
            SCIENCE_FICTION,
            WESTERN
        }

        public void loadInMovie(Genre genre, int amount)
        {
            for (int x = 0; x < amount; x++) {
                movies.add(new Movie(x, genre));
            }
        }

        public Movie removeLastMovieWithGenre(Genre genre)
        {
            ListIterator<Movie> iterator = movies.listIterator(movies.size());
            while (iterator.hasPrevious()) {
                Movie movie = iterator.previous();
                if (genre.equals(movie.genre)) {
                    iterator.remove();
                    return movie;
                }
            }
            throw new RuntimeException("No movie found"); // or return null, or change return type to boolean or void.
        }



        public static void main(String[] args)
        {
            MovieListExample movieListExample = new MovieListExample();
            movieListExample.loadInMovie(Genre.NON_FICTION, 3);
            movieListExample.loadInMovie(Genre.GENERAL_FICTION, 3);
            movieListExample.loadInMovie(Genre.SCIENCE_FICTION, 3);
            movieListExample.loadInMovie(Genre.WESTERN, 3);

            System.out.println("SciFi movies in collection");
            movieListExample.movies.stream().filter(movie -> movie.genre.equals(Genre.SCIENCE_FICTION)).forEach(movie -> System.out.println(movie));

            Movie removeLastMovieWithGenre = movieListExample.removeLastMovieWithGenre(Genre.SCIENCE_FICTION);
            System.out.println("Removed " + removeLastMovieWithGenre);
            System.out.println("Remains in collection");
            movieListExample.movies.stream().filter(movie -> movie.genre.equals(Genre.SCIENCE_FICTION)).forEach(movie -> System.out.println(movie));
        }
    }