首先我使用方法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.如何过滤类型并删除最后一个元素?
答案 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));
}
}