所以我试图按照演员姓名的字母顺序对这个“电影”类型的Arraylist进行排序,并且不包含重复项,这意味着使用树集。
所以我已经实现了“可比较的”界面,然后在按照字母表排序列表之后不知道该怎么做
public int compareTo(Movie m){
for(Movie movileTitle: moviesList){
return movileTitle.getActor().compareTo(m.getActor());
}
return 0;
}
//this is where I'm trying add the arrayList of the movies and sort them using a treeSet
public TreeSet<Movie> movieListByOrder(){
TreeSet<Movie> movieTemp = new TreeSet<>();
//Note, "allMoviesList" is the the list that contains all movies(duplicates) that I'm trying
to add to the treeSet, so that it gets rid of duplicates and that is also ordered.
movieTemp.addAll(allMoviesList);
System.out.println(movieTemp);
return movieTemp;
}
答案 0 :(得分:0)
继续朝着您已经前进的方向前进,您可以在创建TreeSet
时尝试使用内联比较器:
Set<Movie> treeSet = new TreeSet<Movie>(new Comparator<Movie>() {
@Override
public int compare(Movie m1, Movie m2) {
if (m1 == null) {
if (m2 != null) return -1;
else return 0;
}
else if (m2 == null) {
return 1;
}
else {
return m1.getActor().compareTo(m2.getActor());
}
}
});
TreeSet
是一个有序集合,这意味着它将保持上述比较器强加的排序顺序。因此,如果您想按顺序打印出集合的内容,则只需要遍历它。
答案 1 :(得分:0)
所有看起来都很陈旧,抱歉。
尝试查看此代码并确定它是否更有趣。
movies.stream()
.sorted(comparing(Movie::getActor))
.distinct()
.collect(toList());
PS:玩性能调整以获得额外信用